まず、私はknitrと再現性のある解析のコンセプトを非常に熟知していますが、私の現在のワークフロー(Word文書への多くのコピー貼り付けを含む)を改善する可能性を見てください。knitrで複数のpdfレポートを作成するループを使用すると、ちょっとした助けを必要とします
私は多くの場合、グループ(この例では病院)によって複数のレポートを作成しなければならず、各病院内で、結果を報告している多くの異なる病棟が存在することがあります。以前はループを使ってRですべてのプロットと解析を実行した後、コピー/貼り付け作業を開始しました。しかし、この投稿(Can Sweave produce many pdfs automatically?)を読んだ後、私は実際に多くのステップをスキップして、Rnw/knitrを通してRから報告することができるという希望を与えました。
しかし、Rnw内のR環境が私がそれに渡そうとしているループ変数を認識していないように見えることがあります。 )。私のニット()のコードチャンクを実行しようとした後
## 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)
私はこのエラーを取得する:
Error in file(con, "w") : invalid 'description' argument
そして、私は* .texファイルが作成されたディレクトリに見たとき、私は見ることができます病院Aの2つのpdfプロットが作成されました(Bはありません)。病院固有の* .texファイルはpdfに編成されませんでした。あなたが提供することができる任意のヘルプの事前に感謝!
いくつかの行を保存する 'knit2pdf'に+1してください。 – Ben
ブライアン、そして私のマシン(何らかの理由で)は、lapply tools :: texi2pdfよりもknit2pdfをたくさん好きです!驚くばかり! – Chris
@Brian Diggs、これをまだ監視しているかどうかはわかりませんが、各区のプロットの後ろに記述テキスト*を挿入したい場合は.Rnwファイルのプロットコードループ内にあります。一番いい方法?プロット直後にcat( "\\ Sexpr {ward}についての情報テキストです")を挿入しようとしました。また、コードチャンクオプションtidy.opts = list(comment = "")も有効にしていますが、knit2pdfは両方のプロットの後にテキストを配置します。また、コンパイル時に "\"がエスケープエラー(?)を引き起こします。 – Chris