为每个对象生成摘要表和一个页面报告

时间:2017-04-19 13:54:20

标签: r sweave

这是一个更普遍的问题,因为我不知道从哪里开始。我不是老师,但这是我将要使用的例子,因为它是可以关联的。我使用R和Sweave来生成这些报告。

假设我是一名有6个班级的老师,我想为每个班级生成一份报告。每份报告都以一个汇总表开始,该汇总表列出了班级中的每个学生以及他们当前时期和以前时期的成绩。在每个报告的后续页面中,是每个学生在当前评分期间的一页摘要,其中包含关于家庭作业,测验,测试等的一些图表和分数。

我已经使用this answer生成循环报告取得了很大的成功,并且可能会通过生成摘要页面来开始每个报告的过程中摸索出来。但是,我对如何获得每个学生的子报告感到有点困惑。任何有关搜索内容或在线文章的建议都非常感谢。此外,如果您对我的一般性问题有一般性建议,也非常感谢。

1 个答案:

答案 0 :(得分:0)

对于任何看到这一点的人来说,关键是google Master和Child Sweave Documents。这是一般答案:

classes.r

library(knitr)
library(tidyverse)

class_scores <- data.frame(class = as.factor(rep(1:5, 520)),
                       student = rep(letters, 100),
                       score = runif(2600, min = 50, max = 100))
for (i in 1:5){
  class_sub <- class_scores %>%
    filter(class == i)
  title <- paste0("class", i, ".tex")
  knit2pdf("master_class.rnw", title)
}

master_class.rnw

\documentclass{article}

\begin{document}

Here's the report for Class \Sexpr{i}

\clearpage

\section{Summary}

The Summary of the Class.
<<master_summary, include = FALSE>>=
  summary <- class_sub %>%
    group_by(student) %>%
    summarize(score = mean(score))
@

\Sexpr{kable(summary)}

\section{Student Reports}

Here's the section for each Student's report

\clearpage

<<master_loop, include = FALSE>>=

  student_out <- NULL

  for (let in letters) {
    student_out <- c(student_out, knit_child("student_report.rnw"))
  }
@

\Sexpr{paste(student_out, collapse = "\n")}

End Class Report

\end{document}

student_report.rnw

Here is the report for student \Sexpr{let}

%note: don't name these code chunks!

<<include = FALSE>>=
  student <- class_sub %>%
    filter(student == let)

  p <- ggplot(student, aes(x = score)) +
    geom_histogram()
@

\Sexpr{summary(student$score)}

<<echo = FALSE>>=
  p
@

End Student Report

\clearpage