我创建了一个rmarkdown报告,其中包含一堆代码块。我现在正在为它创建摘要首页,并希望包含内联计算,例如
Blah blah blah summary stuff.... We found the mean to be `r mean(some_object_from_the_report)`. Blah blah blah more summary stuff.
在RMD文件的开头,some_object_from_the_report还没有存在。是否有任何方法可以告诉knitr推迟评估该代码片段,直到后面的项目全部计算完毕为止?
感谢您的任何提示!
编辑:
建议注释是在knitr选项中设置echo = false。要么我做错了,要么它对我的情况没有帮助。以下简短的例子说明了这一点。
---
title: "Minimal test of delayed evaluation"
author: "sff"
date: "December 13, 2017"
output: html_document
---
```{r setup, include=TRUE}
knitr::opts_chunk$set(echo = FALSE)
```
## Summary
Summary of blahblahblah. Also here's a mean from the report: `r mean(testobj)`.
## Report
```{r report_stuff}
testobj <- c(1, 2, 3)
```
Knitr抛出一个未找到对象的错误。我是否错误地执行了该建议,或者该建议未能实现我所寻找的目标?
答案 0 :(得分:1)
这是一个简单的工作示例,您在摘要之前设置了第一个块,如果您需要调整\graphicspath{}
之类的其他因素,可以在文档的最开头设置。
如果包含列表的Rdata文件不存在,则在此块中创建一个列表。您需要使用文本中调用的值填充它。
第二轮你会得到
请注意,通过这种方式,您可以避免运行长时间的计算,只需保存结果。
\documentclass{article}
\title{Testing how to save results for the abstract}
\author{}
\begin{document}
% this chunk comes just after begin{document}
<< init, echo=FALSE, eval=TRUE,results="hide" >>=
require(knitr)
summary_list_path <-paste0(getwd(),"/data/summary_list.Rdata")
if (!file.exists(summary_list_path)){
summary_list<-list()
summary_list[["A"]]<-list()
summary_list[["B"]]<-list()
summary_list[["A"]][["N"]]<-NA
summary_list[["A"]][["p"]]<-NA
summary_list[["B"]][["text"]]<-"extremely sad"
} else {
load(summary_list_path)
}
@
\maketitle
\begin{abstract}
My population is \Sexpr{summary_list[["A"]][["N"]]} and the p value was \Sexpr{summary_list[["A"]][["p"]]} as a result I am \Sexpr{summary_list[["B"]][["text"]]}
\end{abstract}
<<chunk_1, echo=FALSE, eval=TRUE,results="hide" >>=
summary_list[["A"]][["N"]]<-20
summary_list[["A"]][["p"]]<-0.05
# save your list at the end of each chunk, that was you can also avoid
# processing everyting.
save(summary_list,file=summary_list_path)
@
<<chunk_2, echo=FALSE, eval=TRUE,results="hide" >>=
summary_list[["B"]][["text"]]<-"happy"
save(summary_list,file=summary_list_path)
@
\end{document}