【问题标题】:How to tell RStudio to autocomplete my function's arguments with package names?如何告诉 RStudio 用包名自动完成我的函数参数?
【发布时间】:2019-04-12 02:28:11
【问题描述】:

According to RStudio:

此外,某些函数,例如 library() 和 require(),需要包名才能完成。 RStudio 会自动推断特定函数是否需要包名并提供这些名称作为完成...

我的问题是:如何?我正在编写一个将包名称作为参数的自定义函数,但 RStudio 仅使用对象和函数名称完成参数,我不知道 RStudio 正在接收的 library() 和 require() 代码是什么开。

我的功能是:

unpack <- function(...,
                   lib   = NULL,
                   repos = getOption("repos")) {
  pkgs <- sapply(match.call(expand.dots = TRUE)[-1], as.character)
  new.pkgs <-
    pkgs[!(
      pkgs %in% installed.packages(lib.loc = lib)[, "Package"]
    )]
  if (length(new.pkgs))
    install.packages(new.pkgs,
                     lib   = lib,
                     repos = repos)
  sapply(pkgs, require,
         lib.loc = lib,
         character.only = TRUE)
}

【问题讨论】:

  • 这里有相关的讨论(关于扩展 RStudio 的自动完成行为):github.com/ropensci/unconf17/issues/52,尽管在 1.5 年内没有明显的活动。
  • @r2evans 啊 - 所以答案可能是 RStudio 为名为 library 和 require 的函数编写了异常代码。我想我可以尝试掩盖这两个中的一个……哈哈
  • 完美,谢谢@hrbrmstr!不是我希望的答案,而是我需要的确切答案。实际上,我只是尝试将我的函数命名为library,而且,是的,效果很好。感觉很不合适,但是当法律变得不公正时,正义就变成了不法之徒。
  • 是的,屏蔽功能,可能会出什么问题?

标签: r autocomplete package rstudio r-infer


【解决方案1】:

正如@hrbrmstr 指出的那样,Java 和 R 代码都专门命名了使用包名称自动完成的四个函数,因此解决方案是屏蔽其中一个并交叉手指,或者将函数的名称添加到这些列表中在两个源文件中(或者可能只是 R,我想知道)。

【讨论】:

    【解决方案2】:

    我最近创建了一个包含更多自动完成功能的包(尽管完全是实验性的)(仅作为额外代码)。

    这里可以看到https://github.com/r-rudra/patch/blob/main/inst/embedded/usecases.R

    也许很快所有这些都将默认在 RStudio 中可用。

    查看this comment

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 2013-09-08
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多