Sweave, R, Beamer: Как преобразовать текст LaTex в файле Rnw в комментарии R? - PullRequest
7 голосов
/ 10 ноября 2011

Скажем, у меня есть .Rnw файл, содержащий обычный LaTex, смешанный с кусками кода R.(Я особенно заинтересован в преобразовании документа .Rnw слайдов, но этот вопрос относится к любому документу .Rnw).Теперь я хочу преобразовать это в файл, который содержит весь код R, плюс весь текст, который обычно генерируется LaTex, как R comments .Другими словами, функциональность, которую я хочу, похожа на то, что делает Stangle(), но я также хочу, чтобы вся текстовая часть LaTex была преобразована в обычный текст, закомментированный в результирующем файле .R.

Это был бы очень удобный способ автоматически сгенерировать закомментированный R-файл, который легко увидеть в вашем любимом редакторе с подсветкой синтаксиса (например, emacs).Это может показаться отличной идеей для документа Sweave, который представляет собой длинную статью с небольшим количеством кода R, но выглядит привлекательным, когда документ .Rnw фактически представляет собой слайд-презентацию (например, с использованием beamer) -тогда текстовая часть слайдов будет содержать идеальные комментарии для кода R.

У кого-нибудь есть идеи, как это сделать?Заранее спасибо.

1 Ответ

8 голосов
/ 10 ноября 2011

Вот один подход с использованием 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>>
...