【问题标题】:Automating LaTeX reports with Brew, Pander and R使用 Brew、Pander 和 R 自动化 LaTeX 报告
【发布时间】:2023-03-17 06:54:01
【问题描述】:

我正在尝试编写一个采用数据集并生成简单数据字典的 brew 模板。

我想要一个带有 var 名称的单独页面,以及该 var 的频率表,所以到目前为止我已经写了这个:

一个返回频率表的 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')

我知道这是来自&lt;%= xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]) %&gt; 语句,如果我将它包装在print(xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i])) 中,错误就会消失 但是,由于某种原因,我现在获得了每个表 TWICE 的 xtable LaTeX 输出,这是一个主要问题,因为手动删除额外的表会破坏自动化报告的目的。

看完https://learnr.wordpress.com/2009/09/09/brew-creating-repetitive-reports/#X12 我尝试使用 include_tbl 函数,它似乎使用了我已经在使用的相同 print(xtable(...)) 概念,并且我遇到了相同的问题,xtable LaTeX 输出在每个循环中出现两次。

自从这篇文章写于 6 年前以来,我猜 R 中的某些东西从那时起发生了变化,这影响了示例的功能。

据我所知,Brew 模板无法在不复制它们的情况下使用 R 表,这不可能是真的。

最后,我的会话信息:

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 

【问题讨论】:

    标签: r latex pandoc xtable pander


    【解决方案1】:

    我认为问题在于 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 混淆之前可以删除多少个空格。

    【讨论】:

    • 使用你的方式,我得到错误:“gsub("$", "\\$", result, fixed=TRUE) 中的错误:输入字符串 2 在此语言环境中无效
    • 我在 PC 上运行代码并没有收到错误,但我又得到了重复的表,所以回到第一步。
    • 我没看到,现在更正了。基本上, print() 是一个副作用,所以你不想使用&lt;%=&lt;% 否则输出是重复的。
    【解决方案2】:

    由于问题带有pander 标签,请让我使用改进的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  
    ----------------------------------------
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多