3

我正在使用 R 中 knitr 包中的缝合功能为我的学生创建 R 代码的 html 文件作为示例。

我有数百个 R 脚本,并且正在自动化创建 html 页面的过程。

但是,如果我的 R 脚本包含注释行,例如

## - - - 例子 - - -

然后是缝合功能thinks,这是代码块的标签,并且经常丢弃我脚本的其他部分。

有没有办法在函数turn off 中分块stitch()以传递所有代码as is?我查看了stitch()and的内部代码,read_chunk()但似乎看不出它是如何知道何时 ## ----- Example -----是块标签的。

这是最小的工作示例:R 3.0.1;针织机 1.4.1

# Test out problem with stitch in knitr

my.code <- "# This a sample of R code
x <- 1:10
print(x)
plot(x,x)

## ---------------- Example  -----
# Notice that only this part of the code appears in the html file.
x <- 10:30
print(x)
plot(x,x)

NULL
"

writeLines(my.code, con='R.code')

library(knitr)
stitch("R.code", system.file("misc", "knitr-template.Rhtml", package = "knitr"))
4

2 回答 2

5

这是knitr 1.3 中引入的一个新功能:# ----在使用read_chunk().

如果您不想要此功能,您可以在 之后使用少于 4 个破折号#,例如

## --- Example ----
## -- Example ----
## Example ----

我假设你有这样的评论是为了 RStudio 代码部分,这需要在部分标题的末尾至少有四个破折号。

那你需要Github 上的开发版 knitr v1.4.6来彻底修复这个问题。

于 2013-08-31T05:46:32.023 回答
2

一种可能的解决方法是预处理您的文件并更改字符,以便stitch不尝试解释这些行:

以下代码:

require(gsubfn)

tmp <- readLines('example1.R')

gsubfn("(-+)( *Example *)(-+)", function(one,two,three) {
    paste0( paste( rep('=', nchar(one)), collapse='' ),
        two,
        paste( rep('=', nchar(three)), collapse='' ) ) },
    tmp)

writeLines(tmp, 'example1.R')

将读入文件“example1.R”,并用“=”代替“-”(相同的数字)并将结果写回同一个文件。您可以更改正则表达式以捕获不同的注释或更改函数以替换为不同的字符。如果您不想覆盖原始文件(可能更安全),您可以保存为不同的文件名。您可以将上述所有内容包装在一个函数中,并遍历文件夹中的所有文件以修改所有文件。然后运行stitch结果应该不理会评论。

于 2013-08-31T17:42:38.000 回答