2015-07-10 65 views
4

我想創建一個數字變量(在代碼中稱爲nClusters),它可以在R代碼塊和LaTeX中的knitr文檔中使用。下面的代碼就是一個例子。針對R代碼塊和LaTeX的knitr中的全局變量

在這裏,我初始化並賦值爲7的數值變量nClusters。稍後,在文檔中,我調用它在一個R代碼塊中,這似乎工作正常。然而,我再嘗試它調用一個LaTeX節(將R代碼塊外),這是導致問題:

\documentclass{article} 
\usepackage{float, hyperref} 
\usepackage[margin=1in]{geometry} 
\usepackage{pgffor} 

\begin{document} 

<<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 
\begin{center} 
\foreach \i in {2,3,...,nClusters} { 
    Hello \i\ 
} 
\end{center} 

\end{document} 

當我編織這個,我得到下面的輸出:

Current output

當輸出應爲:

Desired output

的差異在乳膠呼叫發生到variab樂,因爲如果我在7硬編碼,那麼它的作品。因此,我的問題是:是否有可能在knitr中創建一個可以在R代碼塊和LaTeX部件中調用的全局變量?

+0

我想這是一個'foreach'問題。通常來說,'R'變量可以通過'$ \ Sexpr {nClusters} $'來訪問,但不知道這個可以在這種情況下工作,你應該試試看! – clemlaflemme

回答

0

當使用pgffor,

\foreach <variables> in {<list>} <commands> 

是逗號分隔的值的列表。任何東西都可以用作價值。在這裏你的變量不傳遞給腳本的乳膠一部分,如果你嘗試代碼:

\begin{center} 
\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{}

\begin{center} 
\foreach \i in {2,3,...,\Sexpr{nClusters}} { 
    Hello \i\ 
} 

產生

right answer