如何通过 Rscript 和命令行参数从命令行使用 knitr?

问题描述 投票:0回答:3

我有一个 R 代码

my_code.R
,它接受一个文件
test.txt
的参数。我可以使用:

   Rscript -e my_code.R test.txt 

并运行脚本,但我想使用 knitR 中的stitch() 来生成 pdf/tex 格式的脚本报告。

我已经研究了堆栈溢出并使用了以下建议,但没有得到任何结果:

   Rscript -e "library(knitr);knit('my_code.R "-args arg1=test.txt" ')"
   Rscript -e "knitr::stitch('my_code.R "-args arg1=test.txt"')"

这是关于我想要的内容的另一个类似讨论(链接),但可以选择添加参数。

r knitr
3个回答
9
投票

我不明白为什么这是不可能的。这是

my_code.R

commandArgs(TRUE)

我只是跑步

Rscript -e "library(knitr); stitch('my_code.R')" --args foo bar whatever=blabla

我得到了输出

knitr stitch() output

您在最初的尝试中似乎没有正确使用双引号。应该是

Rscript -e "library(knitr); stitch('my_code.R')" --args arg1=test.txt

0
投票

您可以使用

knit2pdf
并使用其
envir
参数将参数传递给报表。

换句话说,解决方案是创建 2 个独立的文件:

  • R 脚本,您可以这样调用
    knit2pdf
    m_code.R
  • markdown 报告文件 (.Rnw,.Rmd) :
    m_code_report.Rnw

m_code.R

此脚本包含所有 R 代码。这个想法是创建一个环境变量“params”,在其中放置需要显示/呈现的所有参数。

library(knitr)
library(markdown)
ff <- commandArgs(TRUE)[1]
params <- new.env()
e$ff <- ff
## here I pass all the parameters to the report
## I assume that the report and the code R in the same location
## the result pdf also will be in the same location , otherwise you can set 
## paths as you like  
knit2pdf('m_code_report.Rnw',envir=params)  report

m_code_report.Rnw

报告显示结果使用环境“params”中包含的变量。

\documentclass{article}
\begin{document}
<<>>=
summary(ff)
@
\end{document}

然后您使用 Rscript 调用 Rscript,如下所示:

Rscript m_code.R "cars"

0
投票

尝试

rmarkdown::render()
获取直接从 .R 文件创建的(例如 PDF)。也可以传递参数。 https://bookdown.org/yihui/rmarkdown-cookbook/rmarkdown-render.html

© www.soinside.com 2019 - 2024. All rights reserved.