7

假设我有一个.Rnw文件,其中包含与 R 代码块混合的常用 LaTex。(我对转换.Rnw幻灯片文档特别感兴趣,但这个问题适用于任何.Rnw文档)。现在我想将其转换为包含所有 R 代码的文件,以及通常由 LaTex 生成的所有文本,如R 注释。换句话说,我想要的功能与Stangle()所做的类似,但我还希望将 LaTex 的所有文本部分转换为在生成的 .R 文件中注释掉的纯文本。

这将是一种非常方便的自动生成带注释的 R 文件的方法,该文件很容易在您最喜欢的语法高亮编辑器(例如 emacs)中查看。对于只有一点 R 代码的长篇文章 Sweave 文档,这听起来可能不是一个好主意,但是当.Rnw文档实际上是幻灯片演示文稿(例如使用beamer)时,它开始看起来很吸引人——然后是幻灯片将为 R 代码提供完美的注释。

有人对如何做到这一点有任何想法吗?提前致谢。

4

1 回答 1

8

这是一种使用regex. 仍然存在一些问题,我将维护一个列表,该列表将根据解决方案进行更新。

# READ LINES FROM RNW FILE
lines <- readLines('http://users.stat.umn.edu/~charlie/Sweave/foo.Rnw')

# DETECT CODE LINES USING SWEAVE CHUNK DEFINITIONS
start_chunk <- grep("^<<.*=$", lines)
end_chunk   <- grep("^@" , lines)
r_lines     <- unlist(mapply(seq, start_chunk + 1, end_chunk - 1))

# COMMENT OUT NON CODE LINES AND WRITE TO FILE
lines[-r_lines] <- paste("##", lines[-r_lines])
writeLines(lines, con='codefile.R')

遗留问题:

  1. 不能很好地处理在其他块中调用的块<<chunk_name>>
于 2011-11-09T22:51:24.650 回答