【发布时间】:2014-11-12 09:50:10
【问题描述】:
以下代码是针对我遇到的问题的非常简化的MRE。我尽量避免使用R 模板包,例如brew,而只使用knit_expand() 来实现我的目标。 问题是双重的:
- 生成的块没有被解析(这在我的真实代码中没有发生,但在 MRE 中发生)
- 代替LaTeX
\includegraphics、knitr(或rmarkdown、或pandoc)生成用于插入图形的RMarkdown语法(![])。
关于前者,我感觉可能与我错误使用get()或其论点有关。您的建议将不胜感激。 MRE 如下('.Rmd' 文档):
---
title: "MRE: a dynamic chunk issue"
author: "Aleksandr Blekh"
output:
pdf_document:
fig_caption: yes
keep_tex: yes
highlight: NULL
---
```{r, echo=FALSE, include=FALSE}
library(knitr)
opts_knit$set(progress = F, verbose = F)
opts_chunk$set(comment=NA, warning=FALSE, message=FALSE, echo=FALSE, tidy=FALSE)
```
```{r Preparation, results='hide'}
g1 <- plot(cars)
g2 <- plot(iris$Sepal.Length)
myPlots <- list(g1, g2)
bcRefStr <- list("objType" = "fig",
"objs" = c("g1", "g2"),
"str" = "Plots \\ref{fig:g1} and \\ref{fig:g2}")
```
```{r DynamicChunk, include=FALSE}
chunkName <- "{{name}}"
chunkHeader <- paste0("```{r ", chunkName, ", ")
chunkOptions <- "include=TRUE, results='asis', fig.height=4, fig.width=4, fig.cap='{{name}}'"
chunkHeaderFull <- paste0(chunkHeader, chunkOptions, "}")
chunkBody <- "print(get('{{name}}'))"
latexFigEnvBegin <- "cat('\\\\begin{figure}')"
latexFigEnvEnd <- "cat('\\\\end{figure}')"
latexFigCenter <- "cat('\\\\centering')"
latexObjLabel <- paste0("cat('\\\\caption{\\\\ ", "{{name}}\\\\label{", bcRefStr$objType, ":{{name}}", "}}')")
chunkText <- c(chunkHeaderFull,
latexFigEnvBegin, latexFigCenter,
chunkBody,
latexObjLabel, latexFigEnvEnd,
"```", "\n")
figReportParts <- lapply(bcRefStr$objs, function (x) knit_expand(text = chunkText, name = x))
```
`r knit(text = unlist(figReportParts))`
【问题讨论】:
-
@Andrie:感谢您编辑我的问题。我太关心问题本身,而忽略了提高问题的可读性。
-
你能把你的例子最小化吗?例如,有很多不必要的漂亮图形创建。简化图。然后简化并删除一些乳胶格式。这将使真正的问题出现。目前我只是盯着一堵代码墙,想知道它的一半是做什么的。
-
我不认为你的问题根本上与针织块有关。尝试以交互方式从 R 运行代码,然后在最后一个块评估
invisible(sapply(figReportParts, cat)); lapply(figReportParts, function(p) knit(text=p))之前。这是在最后一块中编织的内容,但它包含错误。解决这个问题,然后其余的可能会到位。 -
在您进行编辑之前,我以为我知道您在问什么。现在它只是混合在一起的文本和代码的一种模糊。我建议您删除对“当前状态”和“更新”的引用。写下这个问题,这样它就可以与任何以全新的眼光阅读问题的人保持一致。此外,你真的不需要所有的乳胶来说明问题的关键。尽量使它最小。 PS。我一直在试图理解这段代码的作用,但没有更接近答案。
-
@Tripartio MRE 代表 minimal reproducible example。请在此处查看详细信息:stackoverflow.com/questions/5963269/…。 Stack Exchange 上的其他地方也有类似的答案,但这应该足以理解和使用这个概念,而不管编程语言如何。
标签: r knitr pandoc r-markdown reproducible-research