knitr旋转循环和比较语句

时间:2015-02-16 21:34:45

标签: r comments knitr

我遇到了一个问题,我有一个类似于下面所示的R脚本(有几个循环来绘制一些图形和多个嵌套的if语句来确定要绘制哪一组图形,但这个例子就足够了。)

运行spin('spin-script.R')时,if语句中的所有#'条评论都不会显示在最终文档中。

对于为什么会发生这种情况的任何见解都将非常感激。

        opts_chunk$set(echo=FALSE)

#+ Title
print("This is the title")

#+ Choose, echo = FALSE
choices <-c("0","1", "2", "3", "4", "5")
choice  <- select.list(choices, title = "Pick your favourite Number")
numbers <- as.double(choices)
choice  <- numbers[choices==choice]


#+ SillyNumber
if(choice != 0){

    #+ Loop
    x <- 0
    for (i in 1:choice){

        #' Some text to show user
        x <- x + rnorm(1, choice, 1/choice)

        #+ IfStatement, echo = TRUE
        if( choice == 3  ) {

            #' That's my favourite number too
            {{cat("\n")}}
            #' Have a bonus boost 
            x <- 2 * x
        }
    }
}


# Display, echo = TRUE

sprintf("Your favourite number scored a total of %f points", x) 

2 个答案:

答案 0 :(得分:2)

doc参数控制哪些行被解释为文档,默认值"^#+'[ ]?"仅匹配以#开头且前面没有空格的行。您可能希望将其设置为spin(... , doc="^\\s*#+'[ ]?")以在#'字符串之前允许空格。有关详细信息,请参阅?spin

或者你可以像这样记录你的代码:

#+ SillyNumber
if(choice != 0){

    #+ Loop
    x <- 0
    for (i in 1:choice){

#'         Some text to show user
        x <- x + rnorm(1, choice, 1/choice)

        #+ IfStatement, echo = TRUE
        if( choice == 3  ) {

#'             That's my favourite number too
            {{cat("\n")}}
#'             Have a bonus boost 
            x <- 2 * x
        }
    }
}

答案 1 :(得分:0)

正当理由,这里没有解决方案。我尝试了上面的解决方案,并得到类似的错误: “解析时出错(text = x,srcfile = src):   :7:0:意外结束输入“

然后我检查了生成的相应Rmd文件,发现#'comments(“训练模型”)打破了for循环。这就是意外输入的原因。

```{r}

for(k in 1:fold_num){

#other code

```

训练模型

```{r}

#sext code

}