如果您能够使用bash shell,则可以考虑从bash脚本中简单运行R代码,并将stdout和stderr流传输到文件。下面是一个使用定界符的例子:
文件:test.sh
#!/bin/bash
# this is a bash script
echo "Hello World, this is bash"
test1=$(echo "This is a test")
echo "Here is some R code:"
Rscript --slave --no-save --no-restore - "$test1" <<EOF
## R code
cat("\nHello World, this is R\n")
args <- commandArgs(TRUE)
bash_message<-args[1]
cat("\nThis is a message from bash:\n")
cat("\n",paste0(bash_message),"\n")
EOF
# end of script
然后,当你运行带有两个标准错误和标准输出脚本管道输送到一个日志文件:
$ chmod +x test.sh
$ ./test.sh
$ ./test.sh &>test.log
$ cat test.log
Hello World, this is bash
Here is some R code:
Hello World, this is R
This is a message from bash:
This is a test
其他东西看为此,只需简单地将stredout和stderr从R heredoc中修改到日志文件中即可;我还没有尝试过,但它可能也会起作用。
这只打印输出,但不打印输入。我想查看输入行,例如'1:5 + 1:3',然后是输出,然后是下一个等。我想生成这种类型的日志的原因是因为我有一个需要30+ GB的RAM运行的程序。我在亚马逊云中运行它,并将回归的输出保存到单个文件中。我希望能够通过查看日志来快速找到产生每个文件的代码。注意:如果我只是剪切 - 粘贴控制台输出,就是这样。 – user443854
@ user443854如果是这样,放弃交互式工作并使用脚本是一个更好的主意。 – mbq
@ user443854:是的,你可以把代码放在脚本中吗?在这种情况下,source(“script.R”,echo = TRUE)会做诡计 - 如果你重定向输出,如上所述。 – Tommy