Verwenden Sie Schleifen mit Knitr, um mehrere PDF-Berichte zu erstellen. Benötigen Sie eine kleine Hilfe, um mich über den Berg zu bringen

Zunächst muss ich zugeben, dass ich mit Knitring und dem Konzept der reproduzierbaren Analyse sehr neu bin, aber ich sehe das Potenzial darin, meinen aktuellen Workflow zu verbessern (der viel Kopieren und Einfügen in Word-Dokumente umfasst).

Ich muss oft mehrere Berichte pro Gruppe erstellen (in diesem Beispiel Krankenhaus) und in jedem Krankenhaus kann es viele verschiedene Stationen geben, über die ich ein Ergebnis berichte. Zuvor habe ich alle meine Diagramme und Analysen in R mithilfe von Schleifen ausgeführt und dann mit dem Kopieren / Einfügen begonnen. jedoch nach dem Lesen dieses Beitrags (Kann Sweave automatisch viele PDFs erstellen?), und es gab mir die Hoffnung, dass ich tatsächlich in der Lage sein könnte, viele Schritte zu überspringen und direkt von R über Rnw / knitr zu berichten.

Nachdem ich es ausprobiert habe, sehe ich jedoch, dass es etwas gibt, das nicht ganz funktioniert (da die R-Umgebung im Rnw die Schleifenvariablen, die ich zu übergeben versuche, nicht zu erkennen scheint?).

   ##  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)

Nachdem ich versucht habe, meinen knit () -Code-Block auszuführen, erhalte ich die folgende Fehlermeldung:

Error in file(con, "w") : invalid 'description' argument

Und wenn ich in das Verzeichnis schaue, in dem die * .tex-Datei erstellt werden sollte, sehe ich, dass 2 PDF-Plots von Krankenhaus A erstellt wurden (keine für B) und keine krankenhausspezifische * .tex-Datei, die als PDF-Datei erstellt werden kann. Vielen Dank im Voraus für jede Hilfe, die Sie anbieten können!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage