2015-08-01 4 views
2

Я пытаюсь написать шаблон для приготовления, который берет набор данных, и создает простой словарь данных.Автоматизация отчетов LaTeX с помощью Brew, Pander и R

Я хочу отдельную страницу с именем вар, и таблица частот для этого 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 
<% } -%> 

Я получаю сообщение об ошибке «в кошке (список (...), файл, Сентябрь, фил л, этикетки, добавление): аргумент 1 (тип «список») не может быть обработан «кошки»

Я знаю, что это исходит из <%= xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i]) %> заявления, и ошибка исчезнет, ​​если я оберните его в print(xtable(procfreq(testData[,i]),names(testData)[i],names(testData)[i])) Однако , Теперь я получаю xxtable LaTeX вывод для каждой таблицы TWICE по какой-то причине, что является серьезной проблемой, поскольку вручную удаление лишних таблиц приводит к поражению цели автоматизации отчетов.

Посмотрев на https://learnr.wordpress.com/2009/09/09/brew-creating-repetitive-reports/#X12 Я попытался с помощью функции include_tbl, которая, как представляется, использовать один и тот же шрифт (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 

ответ

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 запутались.

+0

Используя свой путь, я получаю сообщение об ошибке: "Ошибка в GSUB (" $», "\\ $", result, fixed = TRUE): входная строка 2 недопустима в этой локали – Carl

+0

Ошибка возникает из заявления печати – Carl

+0

Я запустил код на ПК, и я не получил ошибку, но снова получил повторяющиеся таблицы, так что вернуться к шагу 1 – Carl

1

В качестве вопроса есть тег 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 
----------------------------------------