gpt4 book ai didi

r - 如何在 knitr 源文件中使用命令行参数?

转载 作者:行者123 更新时间:2023-12-04 04:22:00 24 4
gpt4 key购买 nike

我有一个 R 脚本,它接受我想转换为 Rtex 或 Rnw 文件的命令行参数,以便使用如下命令进行编织:

knit('myScript.Rtex "-args arg1=a arg2=b"')

但我不知道如何将我的命令行参数放入 myScript.Rtex [供 args <- commandArgs() 评估]。我试图避免编写可能包含相同信息并由 myScript.Rtex 读取的临时文件,因为这看起来不必要地不整洁。请问有人可以提供建议/解决方案吗?

那么,长话短说,如何最好地将信息放入 .Rnw 文件中的 block 中,该 block 与处理 .R 文件中的命令行参数等效(或至少相似)?

编辑:合并下面评论中的代码

我想在计算中使用它们。例如,我有一个 R 脚本运行
R CMD BATCH --slave --no-save --no-restore "--args input=blah" myScript.R

现在我想将相同的参数传递给 myScript.Rnw ,它是 myScript.R 的一个版本,但散布着 LaTeX 和 R 代码块。所以更广泛的问题只是为了让 knitr 报告处理对我有用,我需要一种方法来更改运行报告的数据。我有一个解决方法 - 但我肯定想知道我是否可以将命令行参数传递给我的 .Rnw 文件中的一个 block 。现在我不能那样做。

这是我的解决方法:
#!/bin/bash
if [ $# -ne 2 ];
then ` echo "Usage: $0 refdir cmpdir" exit 1`
fi
export CSPP_VIIRS_EDR_REFERENCE_DIR=$1
export CSPP_VIIRS_EDR_COMPARISON_DIR=$2
script=$(dirname $0)'/viirs_edr_UseR_compare.Rnw'
R --slave --no-save --no-restore -e "require(knitr); knit('$script')" &> viirs_edr_UseR_compare.log
pdflatex viirs_edr_UseR_compare.tex
exit 0

我用 Sys.getenv()在 *viirs_edr_UseR_compare.Rnw* 中提取我想要传递的参数,例如, CSPP_VIIRS_EDR_REFERENCE_DIR .

最佳答案

您可以编写 R 脚本而不是 bash 脚本:

my_script_launcher.R

library(knitr)
args <- commandArgs(TRUE)
if (length(args) < 2) stop("Bad args, usage refdir cmpdir")

refdir <- args[1]
cmpdir <- args[2]

knit2pdf('my_script.Rnw')

我的脚本.Rnw
\documentclass{article}
\begin{document}
refdir=\Sexpr{refdir}
cmpdir=\Sexpr{cmpdir}
\end{document}

然后你像这样启动它:
Rscript my_script_launcher.R foo bar

关于r - 如何在 knitr 源文件中使用命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com