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

标签 r linux

过去,我曾使用 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/

相关文章:

r - 操作 map 瓦片数据以与 R 中的栅格数据对齐

r - 加速 R 中的相关矩阵计算

linux - .bashrc 中的 shopt -s extdebug 在脚本文件中不起作用

linux - 为什么内核需要虚拟寻址?

r - 两组数据的组合 corrplot?

r - 在 R 的 data.table 中 foverlap 的一次迭代中查找所有重叠

c++ - 包含 Linux 头文件

php - 在 amazon linux 上为 PHP 安装 mongo 驱动程序时出错

linux - 使用 bash 解析日志以获取唯一的 MAC 地址

r - 用R解析ISO8601日期和时间格式