如何使用 Rscript 将控制台输出写入文本文件,就像使用 R CMD BATCH 一样

qdr*_*ead 4 linux r

过去,我曾经R CMD BATCH在 Linux 服务器上从命令行执行 R 代码。我使用的语法是

R CMD BATCH --no-save --no-restore rcode.r output.txt
Run Code Online (Sandbox Code Playgroud)

上面的代码写入控制台输出,output.txt可以在脚本运行时对其进行监视。这也可以吗Rscript?我更愿意使用,Rscript因为我听说它R CMD BATCH已被弃用。

为了澄清我原来的问题,R CMD BATCH将所有控制台输出(包括消息、警告和print()语句)写入output.txt. 相反,Rscript rcode.r > output.txt仅将print()ed 输出写入文本文件,将其他所有内容写入终端。我如何复制R CMD BATCHwith的行为Rscript

qdr*_*ead 5

经过一番挖掘后我发现,至少在我使用的 Linux 系统上,Rscript这只是一个方便的功能。如果你打电话

Rscript --verbose foobar.r

你会看到底层的调用是:

running
  '/usr/lib/R/bin/R --no-echo --no-restore --file=foobar.r'
Run Code Online (Sandbox Code Playgroud)

这意味着--no-echo被烘焙成Rscript.

因此解决方案是运行

/usr/lib/R/bin/R --no-restore --file=foobar.r > output.txt

其中--no-echo被删除,并且输出被重定向到文本文件,如 @MrFlick 的建议。除了输出之外,还将回显命令。

Rscript如果您想--no-echo默认删除,您可以为其创建一个新别名。例如,在我的.bashrc文件中,有以下内容:

function Rscript2() { R --no-restore --file="$1"; }
export -f Rscript2
Run Code Online (Sandbox Code Playgroud)

现在,在我的 Slurm 批处理作业脚本中,我可以运行Rscript2 file.R以获得所需的行为:所有 R 控制台输出都包含在slurm-*.out文件中。