knitr 中 R 代码块和 LaTeX 的全局变量
Posted
技术标签:
【中文标题】knitr 中 R 代码块和 LaTeX 的全局变量【英文标题】:Global variable in knitr for both R code Chunks and LaTeX 【发布时间】:2015-09-29 11:33:12 【问题描述】:我正在尝试创建一个可以在 R 代码块和 LaTeX 中的 knitr 文档中使用的数字变量(在代码中:称为 nClusters)。下面的代码中有一个示例。
在这里,我初始化数值变量 nClusters 并将其赋值为 7。稍后,在文档中,我在 R 代码块中调用它,这似乎可以正常工作。但是,然后我尝试在 LaTeX 部分(在 R 代码块之外)调用它,这会导致问题:
\documentclassarticle
\usepackagefloat, hyperref
\usepackage[margin=1in]geometry
\usepackagepgffor
\begindocument
<<options, echo=FALSE>>=
nClusters = 7 # I only want to define nClusters once
library(knitr)
opts_chunk$set(concordance=TRUE)
@
<<echo=FALSE,eval=TRUE,results='asis'>>=
# Here the call to nClusters works
for (i in 2:nClusters)
print(paste("This is number",i))
@
% Here the call to nClusters does not work
\begincenter
\foreach \i in 2,3,...,nClusters
Hello \i\
\endcenter
\enddocument
当我编织这个时,我得到以下输出:
什么时候输出应该是:
在对变量的 LaTeX 调用中出现差异,因为如果我在 7 中进行硬编码,那么它就可以工作。因此,我的问题是:是否可以在 knitr 中创建一个可以在 R 代码块和 LaTeX 部分中调用的全局变量?
【问题讨论】:
我猜这是foreach
问题。通常来说,R
变量是通过$\SexprnClusters$
访问的,但不确定这在这种情况下是否可行,你应该试一试!
【参考方案1】:
使用 pgffor 时,
\foreach <variables> in <list> <commands>
是逗号分隔的值列表。任何东西都可以用作值。如果您尝试使用以下代码,则此处的变量不会传递给脚本的 LATEX 部分:
\begincenter
\foreach \i in 2,3,...,C
Hello \i\
你得到
[1] ”This is number 2” [1] ”This is number 3” [1] ”This is number 4” [1] ”This is number 5” [1] ”This is
number 6” [1] ”This is number 7”
Hello 2 Hello 3 Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ? Hello ?
Hello ? Hello ? Hello Hello A Hello B Hello C
哪个是2,3开头C结尾的序列,不知道'?'里面打印出什么字符
您会产生完全相同的结果。要评估 R 块之外的变量,您需要使用 Sexpr
\begincenter
\foreach \i in 2,3,...,\SexprnClusters
Hello \i\
产生
【讨论】:
以上是关于knitr 中 R 代码块和 LaTeX 的全局变量的主要内容,如果未能解决你的问题,请参考以下文章
每次我尝试使用来自R的块代码在Texmaker中运行Latex文档时,我都会收到错误
使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象
.Rnw 文件 (LaTeX) 中的 knitr 语法高亮显示