gpt4 book ai didi

r - 使用带有knitr的循环来生成多个pdf报告...需要一点帮助来帮助我克服困难

转载 作者:行者123 更新时间:2023-12-02 20:11:06 25 4
gpt4 key购买 nike

首先,我必须承认我对knitr和可重复分析的概念非常陌生,但我可以看到它在改进我当前工作流程(其中包括大量复制粘贴到word文档中)方面的潜力。

我经常必须按组(本例中为医院)生成多份报告,并且在每家医院内,我可能要报告许多不同的病房的结果。之前我使用循环在 R 中运行了所有绘图和分析,然后开始复制/粘贴工作;然而,读完这篇文章( Can Sweave produce many pdfs automatically? )后,它给了我希望,我实际上可以跳过许多步骤并直接从 R 直接通过 Rnw/knitr 进行报告。

然而,在尝试之后,我发现有些东西不太有效(因为 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)

尝试运行我的 knit() 代码块后,出现此错误:

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

当我查看要创建 *.tex 文件的目录时,我可以看到生成了 A 医院的 2 个 pdf 图(B 没有),并且没有医院特定的 *.tex 文件可以编织成pdf。预先感谢您提供的任何帮助!

最佳答案

您不需要重新定义 .Rnw 文件中的数据,我认为警告来自于您将输出名称与 Hospital< 放在一起的事实 (医院的完整向量)而不是 hosp (循环索引)。

按照您的示例,testingloops.Rnw 将是

\documentclass[10pt]{article}
\usepackage[margin=1.15 in]{geometry}
<<loaddata, echo=FALSE, message=FALSE>>=
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}

驱动程序 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)

## knitr loop
library("knitr")
for (hosp in unique(df$Hospital)){
knit2pdf("testingloops.Rnw", output=paste0('report_', hosp, '.tex'))
}

关于r - 使用带有knitr的循环来生成多个pdf报告...需要一点帮助来帮助我克服困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15396755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com