Knitr - 使用 Sexpr 定义调用 R 函数的 Latex 命令
Knitr - Define Latex commands that call R functions using Sexpr
我基本上想知道如何定义一个新的 Latex 命令,使其允许嵌套 Sexpr 和其他一些 R 函数,其中 Latex 参数是一个 R 对象。
幸运的是,这个想法在某种程度上是由下面给出的新命令结构传递的:
\newcommand{\SomeLatexCommand}[1]{\Sexpr{"#1"}}
幸运的是,参数确实显示了,尽管是字符串形式。考虑到这一点,我希望使用以下命令:
\newcommand{\SweetLatexCommand}[1]{\Sexpr{SomeRFunction(get("#1"))}}
但是,一旦嵌套在 R 函数中,#1
就不会被读取为 Latex 参数的占位符,而是读取为现有的 R 变量。
有没有办法让最后的命令生效?或者,还有其他巧妙的方法来定义 Latex 命令,这些命令又可以通过 R 对象调用任何 R 函数吗?
美好的一天,
不,你不能那样做。问题是 knitr
的工作方式:
R 运行 knit()
函数(或其他一些 knitr
函数)。该函数在源代码中查找代码块和 \Sexpr
调用,执行它们,并用请求的输出替换它们,生成一个 .tex
文件。
然后 LaTeX 处理那个 .tex
文件。 R不再涉及。
由于\newcommand
是一个LaTeX命令,它只在最后阶段处理,在所有R评估完成后。
knitr
中可能有一种方法可以指定另一个与 \Sexpr
工作方式相同的“宏”,但我认为没有办法同时使用多个宏。
所以你应该做的是在 R 中编写多个函数,然后调用它们来做你想做的事情,如 \Sexpr{fn1(...)}
、\Sexpr{fn2(...)}
等
我想如果你真的下定决心了,你可以在开始时添加一个额外的预处理器阶段,它通过你的 Rnw
文件并将所有看起来像 \SweetLatexCommand{blah}
的字符串替换为 \Sexpr{SomeRFunction(get("blah"))}
然后调用 knit()
,但这似乎工作太多了。
我基本上想知道如何定义一个新的 Latex 命令,使其允许嵌套 Sexpr 和其他一些 R 函数,其中 Latex 参数是一个 R 对象。
幸运的是,这个想法在某种程度上是由下面给出的新命令结构传递的:
\newcommand{\SomeLatexCommand}[1]{\Sexpr{"#1"}}
幸运的是,参数确实显示了,尽管是字符串形式。考虑到这一点,我希望使用以下命令:
\newcommand{\SweetLatexCommand}[1]{\Sexpr{SomeRFunction(get("#1"))}}
但是,一旦嵌套在 R 函数中,#1
就不会被读取为 Latex 参数的占位符,而是读取为现有的 R 变量。
有没有办法让最后的命令生效?或者,还有其他巧妙的方法来定义 Latex 命令,这些命令又可以通过 R 对象调用任何 R 函数吗?
美好的一天,
不,你不能那样做。问题是 knitr
的工作方式:
R 运行 knit()
函数(或其他一些 knitr
函数)。该函数在源代码中查找代码块和 \Sexpr
调用,执行它们,并用请求的输出替换它们,生成一个 .tex
文件。
然后 LaTeX 处理那个 .tex
文件。 R不再涉及。
由于\newcommand
是一个LaTeX命令,它只在最后阶段处理,在所有R评估完成后。
knitr
中可能有一种方法可以指定另一个与 \Sexpr
工作方式相同的“宏”,但我认为没有办法同时使用多个宏。
所以你应该做的是在 R 中编写多个函数,然后调用它们来做你想做的事情,如 \Sexpr{fn1(...)}
、\Sexpr{fn2(...)}
等
我想如果你真的下定决心了,你可以在开始时添加一个额外的预处理器阶段,它通过你的 Rnw
文件并将所有看起来像 \SweetLatexCommand{blah}
的字符串替换为 \Sexpr{SomeRFunction(get("blah"))}
然后调用 knit()
,但这似乎工作太多了。