我正在开发一个bash程序,它执行一个R oneliner命令将RMarkdown模板转换为HTML文档。
此R oneliner命令如下所示:
R -e 'library(rmarkdown) ; rmarkdown::render( "template.Rmd", "html_document", output_file = "report.html", output_dir = "'${OUTDIR}'", params = list( param1 = "'${PARAM1}'", param2 = "'${PARAM2}'", ... ) )
我有一长串参数,让我们说10解释问题,似乎R或bash有一个命令行长度限制。
当我用10个参数执行R oneliner时,我得到如下错误信息:
WARNING: '-e library(rmarkdown)~+~;~+~rmarkdown::render(~+~"template.Rmd",~+~"html_document",~+~output_file~+~=~+~"report.html",~+~output_dir~+~=~+~"output/",~+~params~+~=~+~list(~+~param1~+~=~+~"param2", ...
Fatal error: you must specify '--save', '--no-save' or '--vanilla'
当我用9个参数执行R oneliner时,它没问题(我尝试了不同的组合来验证问题不是最后一个参数)。
当我使用10个参数执行R oneliner但删除其中的所有空格时,它也可以我猜R或bash使用命令行长度限制。
R -e 'library(rmarkdown);rmarkdown::render("template.Rmd","html_document",output_file="report.html",output_dir="'${OUTDIR}'",params=list(param1="'${PARAM1}'",param2="'${PARAM2}'",...))
是否可以增加此限制?
答案 0 :(得分:0)
这会打破多种方式 - 包括你的参数中是否有空格或引号。
相反,尝试将值作为参数传递。这样的事情可以让你知道它是如何工作的:
# create a script file
tee arguments.r << 'EOF'
argv <- commandArgs(trailingOnly=TRUE)
arg1 <- argv[1]
print(paste("Argument 1 was", arg1))
EOF
# set some values
param1="foo bar"
param2="baz"
# run the script with arguments
Rscript arguments.r "$param1" "$param2"
预期产出:
[1] "Argument 1 was foo bar"
始终引用变量并始终使用小写变量名以避免与系统或应用程序变量发生冲突。