提问人:John Doucette 提问时间:7/23/2013 最后编辑:Ari B. FriedmanJohn Doucette 更新时间:1/29/2019 访问量:10592
如何避免每次运行 R 脚本时都打印它?
How can I avoid having my R script printed every time I run it?
问:
假设我有一个 R 脚本:
library('nnet')
something <- runif(50);
print(something)
当我从命令行运行此脚本时,它会打印:
> library('nnet')
> something <- runif(5);
> print(something)
[1] 0.04665518 0.93574275 0.96387299 0.07410239 0.92834019
我只想打印:
[1] 0.04665518 0.93574275 0.96387299 0.07410239 0.92834019
我不知道该怎么做。sink(“/dev/null”) 不做任何事情,手动重定向 stderr 也不做任何事情,我找不到任何有用的信息。
答:
2赞
Ben J. Boyle
7/23/2013
#1
我自己不是 R 用户,但这可能对您有所帮助吗?如何在不抑制输出的情况下运行“R”脚本?
从链接的问题:
如果只想获取输出(而不是命令),请指定 Parameter Set。如果您也需要这些命令,则应设置为 (这意味着设置为 )。
print.eval
TRUE
echo
TRUE
print.eval
TRUE
例如:
source('myscript.R', print.eval = TRUE)
22赞
John Doucette
7/23/2013
#2
解决方法是使用 Rscript,而不是使用 R.其他地方的示例(例如,如何从 R 脚本中读取命令行参数?),从命令行运行脚本
R --args args1 args2... < foo.R
跑步方式
Rscript foo.R args1 args2 ...
只生成输出,而不生成脚本。这也是一种更简洁的脚本运行方式。
评论
1赞
Gavin Simpson
7/23/2013
+1 次要的一点,“做得不好”是不必要的。R并不总是有&你链接到的Q&A现在已经超过3年了。我怀疑当时的用法还没有嵌入到许多 R 用户的心理中。还要注意的是,这些例子并没有回答你的问题——你不希望你的脚本被回应,这是另一回事,批评缺乏预知技能是错误的。RScript
RScript
1赞
John Doucette
7/23/2013
@GavinSimpson 公平点。我已经相应地更新了答案。
0赞
mpettis
4/4/2017
不确定这是否是单独的问题:当我想为 Rscript 打开源代码回显(如 bash 中的“set -x”)时,我被引导到这里——我猜这样做的方法只是运行 ,除非有其他解决方案。<srcfile.R R --vanilla
2赞
IRTFM
7/23/2013
#3
source( 'path/name/filnam.R' , verbose=FALSE)
2赞
Good Will
9/17/2016
#4
对于直接在终端中运行:
R --slave --args dense 12 0.98 < foo.R
要从 Python 运行 R 脚本:
process = subprocess.Popen(["R --slave --args %s %d %.2f < /path/to/your/rscript/foo.R" % (, 12, 0.98) ], shell=True)
process.wait()
为了在终端/命令行和后台运行R脚本,同时禁止/避免打印脚本的每一行和程序的输出,使用R CMD BATCH,如下所示:
R CMD BATCH--slave foo.R 2>&1 foo.out &
另请参阅此参考资料
2赞
M.A. Khan
11/17/2017
#5
对于 Windows 中的 RStudio IDE(版本 1.1.383):
按 Ctrl+Shift+Enter 键,使用 echo(详细)运行整个脚本
按 Ctrl+Shift+S 键运行整个脚本,不带回显(非详细)
评论
0赞
jorvaor
4/27/2023
投了赞成票,因为我正在寻找 Ctrl+Shift+S 快捷键。但是,至少对于 RStudio 版本 2022.07.0,使用 echo 运行整个脚本的快捷方式是 Ctrl+Alt+R。快捷键 Ctrl+Shift+Enter 仅运行当前块。
下一个:在 R 中显示变量的精确值
评论
Rscript foo.R
source("foo.R")
source("foo.R", echo = TRUE)