过去,我曾使用 R CMD BATCH
在 Linux 服务器上从命令行执行 R 代码。我使用的语法是
R CMD BATCH --no-save --no-restore rcode.r output.txt
以上代码将控制台输出写入output.txt
,可以在脚本运行时对其进行监控。这也可以用 Rscript
实现吗?我更愿意使用 Rscript
,因为我听说 R CMD BATCH
已被弃用。
为了澄清我最初的问题,R CMD BATCH
将所有控制台输出(包括消息、警告和 print()
语句)写入 output.txt
。相反,Rscript rcode.r > output.txt
仅将 print()
输出写入文本文件,而将其他所有内容写入终端。如何使用 Rscript
复制 R CMD BATCH
的行为?
最佳答案
经过一番挖掘,我发现,至少在我使用的 Linux 系统上,Rscript
只是一个方便的功能。如果你打电话
Rscript --verbose foobar.r
你会看到底层调用是:
running
'/usr/lib/R/bin/R --no-echo --no-restore --file=foobar.r'
这意味着 --no-echo
被烘焙到 Rscript
中。
因此解决方案是运行
/usr/lib/R/bin/R --no-restore --file=foobar.r > output.txt
--no-echo
被删除,输出被重定向到一个文本文件,正如@MrFlick 所建议的。除了输出之外,还将回显命令。
如果您希望默认删除 --no-echo
,您可以为 Rscript
创建一个新别名。例如,在我的 .bashrc
文件中,我有以下内容:
function Rscript2() { R --no-restore --file="$1"; }
export -f Rscript2
现在,在我的 Slurm 批处理作业脚本中,我可以运行 Rscript2 file.R
以获得所需的行为:所有 R 控制台输出都包含在 slurm-*.out
文件。
关于r - 如何使用 Rscript 将控制台输出写入文本文件,就像使用 R CMD BATCH 一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53486153/