使用 Brew、Pander 和 R 自动化 LaTeX 报告
Automating LaTeX reports with Brew, Pander and R
我正在尝试编写一个采用数据集并生成简单数据字典的 brew 模板。
我想要一个单独的页面,其中包含 var 的名称,以及该 var 的频率 table 所以到目前为止我已经写好了:
returns频率table的R函数:
#produce frequency table, in vector, out dataframe
procfreq<-function(x) {
#find frequencies
temp<-as.data.frame(table(x))
#generate percents
temp[,3]<-temp[,2]/sum(temp[,2])
#name columns
names(temp)<-c("Values","Frequencies","Percent")
return(temp)
}
然后我在 Brew 循环中应用该函数:
<% for (i in seq_along(names(testData))) { -%>
\pagebreak
<%= cat("\section{",names(testData)[i],"}",sep="") %>
<%= xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]) %>
\clearpage
<% } -%>
我在 cat(list(...),file,sep,fill,labels,append 中收到错误:
'cat'
无法处理参数 1(类型 'list')
我知道这是来自 <%= xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]) %>
语句,如果我将它包装在 print(xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]))
中,错误就会消失
但是,出于某种原因,我现在得到每个 table TWICE 的 xtable LaTeX 输出,这是一个主要问题,因为手动删除额外的 tables 违背了自动化报告的目的。
看完后https://learnr.wordpress.com/2009/09/09/brew-creating-repetitive-reports/#X12
我尝试使用 include_tbl 函数,它似乎使用了我已经在使用的相同 print(xtable(...)) 概念,并且我遇到了与 x[=40= 相同的问题] LaTeX 输出在每个循环中出现两次。
自从这篇文章是 6 年前写的,我猜 R 中的一些东西从那时起已经发生了变化,影响了示例的功能。
据我所知,Brew 模板无法在不复制 R table 的情况下使用它们,这不可能是真的。
最后,我的会话信息:
R version 3.2.1 (2015-06-18)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.4 (Yosemite)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] tools stats graphics grDevices utils datasets methods base
other attached packages:
[1] xtable_1.7-4 rmarkdown_0.7 rapport_0.51 yaml_2.1.13 plyr_1.8.3 pander_0.5.2 markdown_0.7.7 lattice_0.20-33
[9] knitr_1.10.5 ggplot2_1.0.1 foreign_0.8-65 brew_1.0-6
loaded via a namespace (and not attached):
[1] Rcpp_0.12.0 reshape_0.8.5 digest_0.6.8 MASS_7.3-43 grid_3.2.1 gtable_0.1.2 magrittr_1.5 scales_0.2.5
[9] stringi_0.5-5 reshape2_1.4.1 proto_0.3-10 stringr_1.0.0 munsell_0.4.2 colorspace_1.2-6 htmltools_0.2.6
我认为问题在于 xtable 的输出是用来打印的,而不是用来喂猫的。这似乎有效,
procfreq<-function(x) {
#find frequencies
temp<-as.data.frame(table(x))
#generate percents
temp[,3]<-temp[,2]/sum(temp[,2])
#name columns
names(temp)<-c("Values","Frequencies","Percent")
return(temp)
}
library(xtable)
<% for (i in seq_along(names(iris))) { -%>
\pagebreak
<%= cat("\section{",names(iris)[i],"}",sep="") %>
<% print(xtable(procfreq(iris[,i]),names(iris)[i],names(iris)[i])) %>
\clearpage
<% } -%>
我想知道在magrittr/brew混淆之前可以删除多少空格。
由于问题有 pander
标签,请让我 post 使用其改进的 brew
功能回答。报告模板文件的内容:
<% for (varname in
tail(names(mtcars), 4)) { # start looping %>
## <%= varname %>
<%= ## results will be automatically passed to `pander`
rapportools::rp.freq(varname, mtcars)
%>
<% } # end loop %>
并通过 pander::Pandoc:brew
酿造它:
> Pandoc.brew('demo.brew')
## vs
--------------------------------------
vs N % Cumul. N Cumul. %
----- --- ------ ---------- ----------
0 18 56.25 18 56.25
1 14 43.75 32 100.00
Total 32 100.00 32 100.00
--------------------------------------
## am
---------------------------------------
am N % Cumul. N Cumul. %
----- --- ------- ---------- ----------
0 19 59.375 19 59.375
1 13 40.625 32 100.000
Total 32 100.000 32 100.000
---------------------------------------
## gear
----------------------------------------
gear N % Cumul. N Cumul. %
------ --- ------- ---------- ----------
3 15 46.875 15 46.875
4 12 37.500 27 84.375
5 5 15.625 32 100.000
Total 32 100.000 32 100.000
----------------------------------------
## carb
----------------------------------------
carb N % Cumul. N Cumul. %
------ --- ------- ---------- ----------
1 7 21.875 7 21.875
2 10 31.250 17 53.125
3 3 9.375 20 62.500
4 10 31.250 30 93.750
6 1 3.125 31 96.875
8 1 3.125 32 100.000
Total 32 100.000 32 100.000
----------------------------------------
我正在尝试编写一个采用数据集并生成简单数据字典的 brew 模板。
我想要一个单独的页面,其中包含 var 的名称,以及该 var 的频率 table 所以到目前为止我已经写好了:
returns频率table的R函数:
#produce frequency table, in vector, out dataframe
procfreq<-function(x) {
#find frequencies
temp<-as.data.frame(table(x))
#generate percents
temp[,3]<-temp[,2]/sum(temp[,2])
#name columns
names(temp)<-c("Values","Frequencies","Percent")
return(temp)
}
然后我在 Brew 循环中应用该函数:
<% for (i in seq_along(names(testData))) { -%>
\pagebreak
<%= cat("\section{",names(testData)[i],"}",sep="") %>
<%= xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]) %>
\clearpage
<% } -%>
我在 cat(list(...),file,sep,fill,labels,append 中收到错误: 'cat'
无法处理参数 1(类型 'list')我知道这是来自 <%= xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]) %>
语句,如果我将它包装在 print(xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]))
中,错误就会消失
但是,出于某种原因,我现在得到每个 table TWICE 的 xtable LaTeX 输出,这是一个主要问题,因为手动删除额外的 tables 违背了自动化报告的目的。
看完后https://learnr.wordpress.com/2009/09/09/brew-creating-repetitive-reports/#X12 我尝试使用 include_tbl 函数,它似乎使用了我已经在使用的相同 print(xtable(...)) 概念,并且我遇到了与 x[=40= 相同的问题] LaTeX 输出在每个循环中出现两次。
自从这篇文章是 6 年前写的,我猜 R 中的一些东西从那时起已经发生了变化,影响了示例的功能。
据我所知,Brew 模板无法在不复制 R table 的情况下使用它们,这不可能是真的。
最后,我的会话信息:
R version 3.2.1 (2015-06-18)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.4 (Yosemite)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] tools stats graphics grDevices utils datasets methods base
other attached packages:
[1] xtable_1.7-4 rmarkdown_0.7 rapport_0.51 yaml_2.1.13 plyr_1.8.3 pander_0.5.2 markdown_0.7.7 lattice_0.20-33
[9] knitr_1.10.5 ggplot2_1.0.1 foreign_0.8-65 brew_1.0-6
loaded via a namespace (and not attached):
[1] Rcpp_0.12.0 reshape_0.8.5 digest_0.6.8 MASS_7.3-43 grid_3.2.1 gtable_0.1.2 magrittr_1.5 scales_0.2.5
[9] stringi_0.5-5 reshape2_1.4.1 proto_0.3-10 stringr_1.0.0 munsell_0.4.2 colorspace_1.2-6 htmltools_0.2.6
我认为问题在于 xtable 的输出是用来打印的,而不是用来喂猫的。这似乎有效,
procfreq<-function(x) {
#find frequencies
temp<-as.data.frame(table(x))
#generate percents
temp[,3]<-temp[,2]/sum(temp[,2])
#name columns
names(temp)<-c("Values","Frequencies","Percent")
return(temp)
}
library(xtable)
<% for (i in seq_along(names(iris))) { -%>
\pagebreak
<%= cat("\section{",names(iris)[i],"}",sep="") %>
<% print(xtable(procfreq(iris[,i]),names(iris)[i],names(iris)[i])) %>
\clearpage
<% } -%>
我想知道在magrittr/brew混淆之前可以删除多少空格。
由于问题有 pander
标签,请让我 post 使用其改进的 brew
功能回答。报告模板文件的内容:
<% for (varname in
tail(names(mtcars), 4)) { # start looping %>
## <%= varname %>
<%= ## results will be automatically passed to `pander`
rapportools::rp.freq(varname, mtcars)
%>
<% } # end loop %>
并通过 pander::Pandoc:brew
酿造它:
> Pandoc.brew('demo.brew')
## vs
--------------------------------------
vs N % Cumul. N Cumul. %
----- --- ------ ---------- ----------
0 18 56.25 18 56.25
1 14 43.75 32 100.00
Total 32 100.00 32 100.00
--------------------------------------
## am
---------------------------------------
am N % Cumul. N Cumul. %
----- --- ------- ---------- ----------
0 19 59.375 19 59.375
1 13 40.625 32 100.000
Total 32 100.000 32 100.000
---------------------------------------
## gear
----------------------------------------
gear N % Cumul. N Cumul. %
------ --- ------- ---------- ----------
3 15 46.875 15 46.875
4 12 37.500 27 84.375
5 5 15.625 32 100.000
Total 32 100.000 32 100.000
----------------------------------------
## carb
----------------------------------------
carb N % Cumul. N Cumul. %
------ --- ------- ---------- ----------
1 7 21.875 7 21.875
2 10 31.250 17 53.125
3 3 9.375 20 62.500
4 10 31.250 30 93.750
6 1 3.125 31 96.875
8 1 3.125 32 100.000
Total 32 100.000 32 100.000
----------------------------------------