我正在尝试将 R 脚本转换为客户端可以在批处理模式下运行的脚本。我的代码使用通用函数,并且接近开头的一个片段如下:

setGeneric("testInput", function(inputData, params = list())
    standardGeneric("testInput"))

我一直在使用 R CMD BATCH 并且它工作正常。但是我找不到让我的脚本在控制台上打印输出的简单方法,因此基于此(以及 Rscript.exe 是运行 R 批处理文件的“正确”方式的建议),我决定切换到 Rscript 。但是,当使用 Rscript 运行相同的 .R 文件时,我得到以下信息:
Error: could not find function "setGeneric"
Execution halted

我知道这背后可能有一个微不足道的原因,但我就是无法弄清楚。有人可以指出我的错误在哪里吗?有什么建议吗?

最佳答案

setGenericmethods 包的一部分,通常在您在交互式 session 中启动 R 时加载,而不是在非交互式 session 中使用 Rscriptlittler 加载。

因此,您需要在脚本中调用 require(methods) 之前添加 setGeneric

例如,此代码将不起作用

Rscript -e "setGeneric('mean', function(x) standardGeneric('mean'))"
Error: could not find function "setGeneric"
Execution halted

但这个会奏效
Rscript -e "require(methods);setGeneric('mean', function(x) standardGeneric('mean'))"
Loading required package: methods
[1] "mean"

关于Rscript 无法识别 setGeneric 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17423869/

10-12 23:35