我看到当一个文件名作为参数时,如何让Rscript执行我想要的操作,例如,如果我的Rscript被调用script并且包含:
#!/usr/bin/Rscript
path <- commandArgs()[1]
writeLines(readLines(path))
Run Code Online (Sandbox Code Playgroud)
然后我可以从bash命令行运行:
Rscript script filename.Rmd --args dev='svg'
Run Code Online (Sandbox Code Playgroud)
并成功地将filename.Rmd回复的内容发回给我.如果不是传递上面的参数像filename.Rmd我想传递文本的文件名stdin,我尝试修改我的脚本从stdin读取:
#!/usr/bin/Rscript
writeLines(file("stdin"))
Run Code Online (Sandbox Code Playgroud)
但我不知道如何为这种情况构建命令行调用.我尝试了内容管道:
cat filename.Rmd | Rscript script --args dev='svg'
Run Code Online (Sandbox Code Playgroud)
并尝试重定向:
Rscript script --args dev='svg' < filename.Rmd
Run Code Online (Sandbox Code Playgroud)
无论哪种方式我都得到错误:
Error in writeLines(file("stdin")) : invalid 'text' argument
Run Code Online (Sandbox Code Playgroud)
(我也试过open(file("stdin"))).我不确定我是否错误地构造了Rscript,或者错误地构造了命令行参数,或者两者都没有.
您需要从创建的连接中读取文本file("stdin"),以便将任何有用的内容传递给text参数writeLines().这应该工作
#!/usr/bin/Rscript
writeLines(readLines(file("stdin")))
Run Code Online (Sandbox Code Playgroud)