对sapply()的调用在交互模式下工作,而不是在批处理模式下工作

时间:2012-06-27 00:52:18

标签: r

我需要以批处理模式执行一些命令(例如,通过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 FAQ,R Inferno,但我找不到任何可以解决这个问题的内容。

1 个答案:

答案 0 :(得分: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