让一个R脚本从stdin读取或接受输入

8

我知道如何让一个R脚本在给定文件名作为参数时执行我想要的操作,例如,如果我的R脚本叫做script并包含:

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

然后我可以从bash命令行运行:
Rscript script filename.Rmd --args dev='svg'

我成功地获取了filename.Rmd的内容并将其回显给了我。如果我不是传递像filename.Rmd这样的文件名作为上述参数,而是想从stdin中传递文本,我尝试修改我的脚本以从stdin读取:

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

但是我不知道如何构建这种情况下的命令行调用。我尝试将内容传送到管道中:

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

并且尝试重定向:

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

and either way I get the error:

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

我也尝试过open(file("stdin"))。我不确定是我构造R脚本有误还是命令行参数有误,或者两者都有误。


1
可能是Piping stdin to R的重复问题。 - hrbrmstr
1
但是你的错误可能是使用 writeLines 来读取而不是 readLines - hrbrmstr
1
谢谢;使用readLines(file("stdin"))代替open(file("stdin"))解决了我的问题。 - cboettig
1个回答

11

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接