2015-01-04 78 views
3

我正在嘗試創建一個數學測試生成器,它隨機化包含在測試中的問題。我想象在knitr中寫出20個左右的問題,然後按下一個按鈕來創建一個包含它們的子集的pdf。我在Rstudio中使用R Markdown。我想有點像一個解決方案:內聯R代碼在knitr中的第二次評估

```{r} 
start<-"";end<-"" 

if(0<runif(1)){ 
start1<-"```{r, echo=F}" 
end1<-"```" 
} 
``` 

`r start1` 
Question 1 
`r end1` 

但是,這導致PDF文件使用:

```{r, echo=F} 
Question 1 
``` 

我如何告訴knitr評估內嵌代碼第二次?還是有一種輕鬆的做事方式?

+1

個人而言,我會使用以下策略:1)在第一不可見塊,寫你的塊代碼到外部R文件; ii)使用代碼外部化功能來評估後續塊。你可以使用'knit_expand()',但我更喜歡有中間文件。 – baptiste 2015-01-04 20:10:43

回答

1

您可以使用cat爲:

--- 
title: "Math test" 
--- 

```{r Setup-Chunk, echo=FALSE} 
q1 <- "Note down the Pythagorean theorem?" 
q2 <- "Sum of angles of a triangle?" 
q3 <- "What is the root of $x^2$?" 
questions <- c(q1,q2,q3) 
selection <- sample(length(questions), 2) # by altering 2 you pick the number of questions 
``` 

```{r, results='asis', echo=FALSE} 
out <- c() 
for(i in selection){ 
    out <- c(out, questions[i]) 
} 
cat(paste("###", seq_along(selection), out,collapse = " \n")) 
``` 

視覺:
enter image description here

+0

感謝您的想法,我不知道knitR的外化部分。但是,我沒有讓貓接受任何類似「$ \ lambda $」的東西,這是不行的。 使用read_chunk從外部R-scripts讀取,使得我的文本看起來像R代碼,據我所知,我想要普通文本......對此有任何想法? – 2015-01-06 12:02:17

+0

您需要編寫'$ \\ lambda $',因爲「\」是一個特殊字符。 看到這篇文章作爲參考:http://stackoverflow.com/questions/11806501/backslash-in-r-string – Rentrop 2015-01-06 13:28:06