【问题标题】:How can I avoid having my R script printed every time I run it?如何避免每次运行 R 脚本时都打印它?
【发布时间】:2013-07-22 20:24:03
【问题描述】:

假设我有一个 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 没有做任何事情,我找不到任何有用的信息。

【问题讨论】:

  • 你是如何“在命令行”运行它的? Rscript foo.R 只打印你想要的...
  • 并且在 R 中 source("foo.R") 通常不会显示脚本的任何内容,除非您通过 source("foo.R", echo = TRUE) 要求它。请确切地向我们展示您正在尝试/在做什么。
  • Rscript 似乎是我所缺少的。 SE 和其他地方的其他帖子使用“R

标签: r r-faq


【解决方案1】:

解决方案是使用 Rscript 运行,而不是使用 R。其他地方的示例(例如 How can I read command line parameters from an R script?),从命令行运行脚本

R --args args1 args2... < foo.R

运行

Rscript foo.R args1 args2 ...

仅生成输出,而不生成脚本。这也是一种运行脚本的更简洁的方式。

【讨论】:

  • +1 小问题,“做得不好”是不必要的。 R 并不总是有RScript 并且您链接到的问答现在已经超过 3 年了。我怀疑当时RScript 的使用并没有嵌入到许多 R 用户的脑海中。另请注意,这些示例并没有回答您的问题 - 您不希望您的脚本得到回应,这是另一回事,批评缺乏预知能力是错误​​的。
  • @GavinSimpson 公平点。我已经相应地更新了答案。
  • @JohnDoucette 优秀的约翰。我希望Stack Overflowr 标签上的更多用户像今天一样具有公民意识。
  • 不确定这是否是一个单独的问题:当我希望为 Rscript 打开 on 源回显(如 bash 中的“set -x”)时,我被指引到这里——我猜这样做的方法就是运行&lt;srcfile.R R --vanilla,除非有其他解决方案。
【解决方案2】:

我自己不是 R 用户,但这对你有帮助吗? How can I run an 'R' script without suppressing output?

来自链接的问题:

如果您只想获取输出(而不是命令),请将 print.eval 参数设置为 TRUE。如果您也需要这些命令,则应将echo 设置为TRUE(这意味着将print.eval 设置为TRUE)。

例如:

source('myscript.R', print.eval = TRUE)

【讨论】:

    【解决方案3】:
    source( 'path/name/filnam.R' , verbose=FALSE)
    

    【讨论】:

      【解决方案4】:

      对于 Windows 中的 RStudio IDE(版本 1.1.383):

      Ctrl+Shift+Enter 键运行带有回显(详细)的整个脚本

      Ctrl+Shift+S 键运行整个脚本而不回显(非详细)

      【讨论】:

        【解决方案5】:

        直接在终端运行:

        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 &
        

        另见this reference

        【讨论】:

          猜你喜欢
          • 2015-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-12
          • 2013-04-25
          • 2017-07-07
          • 1970-01-01
          • 2023-03-22
          相关资源
          最近更新 更多