2014-04-01 117 views
7

我看到如何让Rscript在给出文件名作为参数时执行我想要的操作,例如,如果我的RSCRIPT被称为script,包含:让Rscript读取或从标准输入中获取输入

#!/usr/bin/Rscript 
path <- commandArgs()[1] 
writeLines(readLines(path)) 

然后,我可以从bash命令行中运行:

Rscript script filename.Rmd --args dev='svg' 

,并成功得到filename.Rmd回显给我看的内容。如果不是通过上述说法的文件名一样filename.Rmd我想文本从stdin通过它,我尝试修改我的脚本从标准输入读取:

#!/usr/bin/Rscript 
writeLines(file("stdin")) 

,但我不知道如何构建命令行调用此案件。我试图在内容管道:

cat filename.Rmd | Rscript script --args dev='svg' 

,也试图重定向:

Rscript script --args dev='svg' < filename.Rmd 

,要么这样,我得到的错误:

Error in writeLines(file("stdin")) : invalid 'text' argument 

(我也尝试open(file("stdin")))。我不确定我是不是错误地构造了Rscript,或者是命令行参数不正确,或者两者都有。

+1

可能重复(http://stackoverflow.com/questions/9370609/piping-stdin-to-r) – hrbrmstr

+1

但可能会使用您的错误'writeLines'到读vs'readLines' – hrbrmstr

+0

谢谢;使用'readLines(file(“stdin”))'代替'open(file(“stdin”))'解决了我的问题。 – cboettig

回答

7

您需要从file("stdin")创建的连接中读取文本,以便将有用的任何内容传递给writeLines()的参数text。这应该工作

#!/usr/bin/Rscript 
writeLines(readLines(file("stdin"))) 
[管道标准输入到R]的