knitr spin with 循环和比较语句

knitr spin with loop and comparison statements

我遇到了一个问题,我有一个类似于下面所示的 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) 

doc 参数控制哪些行被解释为文档,默认值 "^#+'[ ]?" 只匹配以 # 开头且之前没有 space 的行它。您可能希望将其设置为 spin(... , doc="^\s*#+'[ ]?") 以允许在 #' 字符串之前使用白色 space。有关详细信息,请参阅 ?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
        }
    }
}

只是原因,这里没有解决方案。我尝试了上述解决方案,并得到类似的错误: “解析错误(text = x,srcfile = src): :7:0: 输入意外结束

然后查看生成的对应Rmd文件,发现#'注释("Train the model")打破了for循环。这就是意外输入的原因。

```{r}

for (k in 1:fold_num){

#其他代码

```

训练模型

```{r}

# 其他代码

}