1

我需要以批处理模式执行一些命令(例如,通过 Rscript)。它们以交互模式工作,但不能以批处理模式工作。这是一个最小的例子:sapply(1:3, is, "numeric"). 为什么这在交互模式下工作但在批处理模式下返回错误?有没有办法让这样的命令在批处理模式下工作?

更具体地说,我需要编写脚本并以批处理模式运行它们。他们需要调用如下所示的函数(我没有编写也无法编辑):

testfun <- function (...)
{
  args <- list(...)
  if (any(!sapply(args, is, "numeric")))
    stop("All arguments must be numeric.")
  else
    writeLines("All arguments look OK.")
}

我需要将一个列表传递给这个函数。类似的命令testfun(list(1, 2, 3))在交互模式下工作。但是在批处理模式下,它会产生错误:Error in match.fun(FUN) : object 'is' not found. 我试图debugger()解决这个问题,但它没有给我任何洞察力。我还查看了 r-help、R 常见问题解答、R Inferno,但我找不到任何与此问题相关的内容。

4

1 回答 1

7

Rscript 默认不加载方法包,因为它需要很多时间。从详细信息部分?Rscript

 ‘--default-packages=list’ where ‘list’ is a comma-separated list
      of package names or ‘NULL’.  Sets the environment variable
      ‘R_DEFAULT_PACKAGES’ which determines the packages loaded on
      startup.  The default for ‘Rscript’ omits ‘methods’ as it
      takes about 60% of the startup time.

您可以使用参数使其加载方法--default-packages

> Rscript -e 'sapply(1:3, is, "numeric")' --default-packages='methods'
[1] TRUE TRUE TRUE
于 2012-06-27T00:58:57.217 回答