Использование циклов с Knitr для создания нескольких отчетов PDF ... нужна небольшая помощь, чтобы справиться с трудностями
Прежде всего, я должен признать, что я очень новичок в knitr и концепции воспроизводимого анализа, но я вижу его потенциал в улучшении моего текущего рабочего процесса (который включает в себя много копий-вставок в документы Word).
Мне часто приходится составлять несколько отчетов по группам (больница в этом примере), и в каждой больнице может быть много разных отделений, по которым я сообщаю о результатах. Ранее я выполнял все свои графики и анализ в R с использованием циклов, затем началась работа по копированию / вставке; однако, прочитав этот пост (Может ли Sweave автоматически создавать множество PDF-файлов?), и это дало мне надежду, что я действительно могу пропустить много шагов и перейти прямо от R, чтобы сообщить через Rnw / knitr.
Однако, попробовав, я вижу, что есть кое-что, что не совсем работает (так как среда R внутри Rnw, похоже, не распознает циклические переменные, которые я пытаюсь передать ей ??).
## make my data
Hospital <- c(rep("A", 20), rep("B", 20))
Ward <- rep(c(rep("ICU", 10), rep("Medicine", 10)), 2)
Month <- rep(seq(1:10), 4)
Outcomes <- rnorm(40, 20, 5)
df <- data.frame(Hospital, Ward, Month, Outcomes)
## Here is my current work flow-- produce all plots, but export as png and cut/paste
for(hosp in unique(df$Hospital)){
subgroup <- df[ df$Hospital == hosp,]
for(ward in unique(subgroup$Ward)){
subgroup2 <- subgroup[subgroup$Ward == ward,]
savename <- paste(hosp, ward)
plot(subgroup2$Month, subgroup2$Outcomes, type="o", main=paste("Trend plot for", savename))
}
}
# followed by much copy/pasting
## Here is what I'm trying to go for using knitr
library(knitr)
for (hosp in unique(df$Hospital)){
knit("C:file.path\\testing_loops.Rnw", output=paste('report_', Hospital, '.tex', sep=""))
}
## With the following *Rnw file
## start *.Rnw Code
\documentclass[10pt]{article}
\usepackage[margin=1.15 in]{geometry}
<<loaddata, echo=FALSE, message=FALSE>>=
Hospital <- c(rep("A", 20), rep("B", 20))
Ward <- rep(c(rep("ICU", 10), rep("Medicine", 10)), 2)
Month <- rep(seq(1:10), 4)
Outcomes <- rnorm(40, 20, 5)
df <- data.frame(Hospital, Ward, Month, Outcomes)
subgroup <- df[ df$Hospital == hosp,]
@
\begin{document}
<<setup, echo=FALSE >>=
opts_chunk$set(fig.path = paste("test", hosp , sep=""))
@
Some infomative text about hospital \Sexpr{hosp}
<<plots, echo=FALSE >>=
for(ward in unique(subgroup$Ward)){
subgroup2 <- subgroup[subgroup$Ward == ward,]
# subgroup2 <- subgroup2[ order(subgroup2$Month),]
savename <- paste(hosp, ward)
plot(subgroup2$Month, subgroup2$Outcomes, type="o", main=paste("Trend plot for", savename))
}
@
\end{document}
## To be then turned into pdf with this
tools::texi2pdf("C:file.path\\report_A.tex", clean = TRUE, quiet = TRUE)
После попытки запустить блок кода knit () я получаю эту ошибку:
Error in file(con, "w") : invalid 'description' argument
И когда я просматриваю каталог, в котором должен был быть создан файл * .tex, я вижу, что были созданы 2 pdf-графика из больницы A (ни одного для B), и нет конкретного * .tex-файла для больницы, который можно было бы связать в pdf. Заранее благодарим за любую помощь, которую вы можете предложить!