Динамический потный документ
Можно ли сгенерировать латексный документ через Sweave, у которого нет предопределенного количества элементов? Я имею в виду, предположим, что мне нужно построить таблицу для каждой строки в фрейме данных. Количество таблиц в документе будет зависеть от количества строк в фрейме данных.
Другими словами, генерируйте латексные элементы внутри циклаfor
. Для каждой строки свив построит таблицу.
То же самое относится и к страницам или другим элементам. Возможно ли это сделать?2 ответа:
Помогает ли это:
\documentclass[a4paper,12pt]{article} \usepackage{Sweave} \begin{document} <<echo=FALSE>>= library( xtable ) df <- structure(list(ID = 2:6, home_pc = structure(c(2L, 6L, 1L, 3L, 5L), .Label = c("BY5 8IB", "CB4 2DT", "DH4 6PB", "KN4 5GH", "MP9 7GH", "NE5 7TH", "VB2 4RF"), class = "factor"), start_pc = structure(c(4L, 3L, 4L, 2L, 1L), .Label = c("BV6 5PB", "CB3 5TH", "FC5 7YH", "Home", "NA"), class = "factor"), end_pc = structure(c(1L, 3L, 3L, 3L, 2L), .Label = c("CB5 4FG", "GH6 8HG", "Home", "NA"), class = "factor")), .Names = c("ID", "home_pc", "start_pc", "end_pc"), row.names = 2:6, class = "data.frame") count = 1 end = 3 @ <<fun,echo=FALSE,eval=FALSE>>= print( xtable( df ) ) @ <<echo=FALSE,results=tex>>= for( i in 1:end ) { print( xtable( df ) ) i <- i + 1 } cat( "\\newpage" ) @ <<echo=FALSE,results=tex>>= if( count < end ) <<fun>> count = count + 1 cat( "\\newpage" ) @ <<echo=FALSE,results=tex>>= if( count < end ) <<fun>> count = count + 1 cat( "\\newpage" ) @ <<echo=FALSE,results=tex>>= if( count < end ) <<fun>> count = count + 1 cat( "\\newpage" ) @ \end{document}
Рад вдаваться в подробности, если это правильный путь!
Вот более короткий способ сделать то же самое. Я использую набор данных
mtcars
вR
и проиллюстрирую, как создавать таблицы по числу цилиндров. Вы можете обработать этот документ, используяSweave
илиknitr
(который является новым ребенком в блоке). Дайте мне знать, как это работает.\documentclass{article} %\SweaveOpts{echo = F} \begin{document} <<load-libraries>>= suppressMessages(require(plyr)) suppressMessages(require(xtable)) @ <<gen-tables, results = tex>>= d_ply(mtcars, .(cyl), xtable, .print = TRUE) @ \end{document}