Po pierwsze, muszę przyznać, że jestem bardzo nowy w dzianinie i koncepcji odtwarzalnej analizy, ale mogę widzę jego potencjał w ulepszaniu mojego obecnego przepływu pracy (który obejmuje wiele wklejania wklejenia do dokumentów Worda).Używanie pętli z knitr do generowania wielu raportów w formacie pdf ... potrzebuję małej pomocy, aby mnie pokonać przez garb
Często muszę tworzyć wiele raportów według grupy (szpital w tym przykładzie) iw każdym szpitalu może istnieć wiele różnych obwodów, na których raportuję wynik. Poprzednio uruchomiłem wszystkie moje wykresy i analizy w R używając pętli, a następnie rozpoczęto kopiowanie/wklejanie; jednak po przeczytaniu tego posta (Can Sweave produce many pdfs automatically?) i dało mi to nadzieję, że faktycznie mogę pominąć wiele kroków i przejść od R do raportu przez Rnw/knitr.
Jednak po wypróbowaniu widzę, że jest coś, co nie jest do końca wyćwiczone (ponieważ środowisko R w obrębie Rnw nie wydaje się rozpoznawać zmiennych pętli, które próbuję przekazać do niego ??).
## 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)
Po próbuje uruchomić mój dzianiny() kod klocek otrzymuję ten błąd:
Error in file(con, "w") : invalid 'description' argument
A kiedy patrzę w katalogu, w którym plik * .tex miał być stworzony, widzę wygenerowano 2 działki pdf ze szpitala A (brak dla B) i brak specyficznego dla szpitala pliku * .tex, który można by wykorzystać w pliku pdf. Z góry dziękujemy za każdą pomoc, którą możesz zaoferować!
+1 dla 'knit2pdf' który zapisuje kilka linii – Ben
Brian, I moja maszyna (z jakiegoś powodu) lubi knit2pdf o wiele więcej niż lapply tools :: texi2pdf! Niesamowite! – Chris
@ Brian Diggs, nie jestem pewien, czy nadal monitorujesz to, ale jeśli chciałem wstawić tekst opisowy * po * działkach każdego oddziału - tak w pętli kodu kreśląc w pliku .Rnw - co byś wiedział Najlepszym sposobem? Próbowałem wstawić kota ("To jest pouczający tekst o \\ Sexpr {ward})" zaraz po spisku. Włączyłem także opcje fragmentów kodu tidy.opts = list (comment = ""), ale knit2pdf umieszcza tekst po obu działkach - nie pod każdym działaniem w pętli, jak zamierzałem. Również podczas kompilacji "\" powoduje błąd ucieczki (?). – Chris