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