A previous post on StackOverflow имеет очень полезное руководство по использованию шаблона. Rnw-файл для создания нескольких отчетов. Я хотел бы дублировать это, за исключением того, что у меня было бы 4 цикла, а не только те, которые использовались в этом примере.Knitr: Используйте вложенные циклы для генерации нескольких отчетов
В моем случае, это петли, которые я использую для создания отчетов:
внешний цикл: цикл по вектору, который содержит имена переменных, которые я хочу проанализировать
внутренние 3 петли: зацикливания через различные сезоны/географические локации
Вот пример кода шаблона, который работает без каких-либо проблем, когда я Поставляем все необходимые переменные, которые будут предоставляться в петлях:
\begin{document}
This is a test in which the \texttt{\Sexpr{varname}} variable is used in this report. If successful, further reports can be generated using a loop with this same script!
First, a plot of the CDFs, with Kolmogorov-Smirnov statistics:
\begin{figure}[h]
\centering
<<cdf-plots,dev='png',out.width='0.5\\linewidth',echo=FALSE,warning=FALSE,fig.align='centering'>>=
chart_stats(varname,data_vec,labs,season,s,h,colvec=colvec,cdf_plot=TRUE)
cap1=paste('Cumulative distribution functions for the counts,',season,s,h)
@
\caption{\Sexpr{cap1}}
\end{figure}
<<ks_calc,warning=FALSE,results='asis',echo=FALSE>>=
library(xtable)
ks=chart_stats(varname,data_vec,labs,season,s,h,ks_test=TRUE,dval=TRUE)
cap=paste('D-values for',season,h,s)
print(xtable(ks,caption=cap))
@
Ради того, чтобы быть в состоянии видеть мой выход, каждый файл в настоящее время создается в виде отдельного файла .tex, как показано ниже:
library(knitr)
setwd("~/data_netcdf")
load("loaded_data.Rdata")
source("~/tempestextremes/test/chart_stats.R")
data_vec<-c("ERA", "climo", "2xCO2","SSTplus2","SSTplus2_2xCO2")
seasons_vec<-c("DJF","JJA","MAM","SON")
sec=c("ATL","PAC")
hemi=c("NH","SH")
var=c('centlat','centlon','area')
for (varname in var){
}
for (season in seasons_vec){
for (h in hemi){
for (s in sec){
output_name=paste(varname,'_',season,'_',h,'_',s,'_report.tex',sep="")
knit2pdf("~/data_netcdf/report_test.Rnw",output=output_name)
}
}
}
}
Существует knitr пример, который делает использование дочерних файлов для объединения выходов в один документ, который звучит похоже на то, что я хотел бы сделать, и вот что я пытался:
<<test-main,include=FALSE>>=
[removed for length]
#testing on just one variable name
var=c('centlat')
for (varname in var){
out=NULL
for (season in seasons_vec){
for (h in hemi){
for (s in sec){
out=c(out,knit_child("~/data_netcdf/report_test.Rnw"))
}
}
}
}
@
\Sexpr(paste(out,collapse='\n'))
б у Я получаю следующее сообщение об ошибке, вероятно, из-за того, что у меня есть несколько уровней петель, которые все используют одни и те же имена ломтя меток в качестве ссылок на цифры:
Error in parse_block(g[-1], g[1], params.src) :
duplicate label 'cdf-plots'
Calls: knit ... process_file -> split_file -> lapply -> FUN -> parse_block
Может кто-то пожалуйста, объясните это сообщение об ошибке ? Нужно ли мне каким-то образом изменять имена ярлыков, чтобы они различались между каждым циклом? Или я должен реализовать три внутренних цикла в файле шаблона? Или, возможно, объединить все .tex-файлы после факта?
Я был бы признателен за помощь в определении оптимального рабочего процесса для этого.
Вам нужно различать имена ярлыков, чтобы они были разными при каждом цикле. Помогает ли вам http://stackoverflow.com/questions/12095113/r-knitr-possible-to-programmatically-modify-chunk-labels? – Tutuchan
Я использовал 'knit_expand', чтобы успешно оценить переменную' prefix', которую я установил в цикле, но я не могу понять, как я буду сочетать это с 'knit_child' (или если я должен даже использовать' knit_child '). Есть предположения? – pianoplunkster
Похоже, вы нашли решение! Так что, как вы видели, вам не нужно 'knit_child', если вы используете' knit_expand'. – Tutuchan