图形编织引擎不会同时显示代码和结果
knit engine for graphs does not show code and result at the same time
这是
的跟进
我想附上图表和代码。
所以我有以下 Rmd
文件,它应该输出图形(取决于 eval
)和代码(取决于 echo
),但它不是图形,而是给出文件名。
我怎样才能让它显示图表和代码?我想,这是由传递给knitr::engine_output()
的options
内部控制的,但是一旦指定code
,我只得到文件名?
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::knit_engines$set(Rlogo = function(options) {
if (options$eval) {
path <- 'logo.jpg'
file.copy(file.path(R.home('doc'), 'html', 'logo.jpg'), path)
out <- list(knitr::include_graphics(path))
} else {
out = ""
}
if (options$echo) {
code <- options$code
} else {
code <- ""
}
knitr::engine_output(
options,
out = out,
code = code
)
})
```
```{Rlogo echo = TRUE, eval = TRUE}
Whatever.
```
试试这个:
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::knit_engines$set(Rlogo = function(options) {
out <- list("")
if (options$eval) {
path <- 'logo.jpg'
file.copy(file.path(R.home('doc'), 'html', 'logo.jpg'), path)
out <- list(knitr::include_graphics(path))
}
if (options$echo)
out <- c(out, options$code)
knitr::engine_output(
options,
out = out
)
})
```
```{Rlogo, echo = TRUE, eval = TRUE}
Whatever.
```
好的 - 我找到了解决方案:
--
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::knit_engines$set(Rlogo = function(options) {
result <- list(cose = "", out = "")
if (options$eval) {
path <- 'logo.jpg'
file.copy(file.path(R.home('doc'), 'html', 'logo.jpg'), path)
result$out <- knitr::engine_output(
options,
out = list(knitr::include_graphics(path))
)
}
if (options$echo)
result$code <- knitr::engine_output(
options,
code = options$code,
out = NULL
)
return(paste(result$code, result$out, sep = "\n\n"))
})
```
```{Rlogo, echo = TRUE, eval = TRUE}
Whatever.
```
有效,因为函数 knitr::engine_output()
只是 returns 一个字符串。这两个字符串只需要附加两个换行即可。
这是
我想附上图表和代码。
所以我有以下 Rmd
文件,它应该输出图形(取决于 eval
)和代码(取决于 echo
),但它不是图形,而是给出文件名。
我怎样才能让它显示图表和代码?我想,这是由传递给knitr::engine_output()
的options
内部控制的,但是一旦指定code
,我只得到文件名?
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::knit_engines$set(Rlogo = function(options) {
if (options$eval) {
path <- 'logo.jpg'
file.copy(file.path(R.home('doc'), 'html', 'logo.jpg'), path)
out <- list(knitr::include_graphics(path))
} else {
out = ""
}
if (options$echo) {
code <- options$code
} else {
code <- ""
}
knitr::engine_output(
options,
out = out,
code = code
)
})
```
```{Rlogo echo = TRUE, eval = TRUE}
Whatever.
```
试试这个:
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::knit_engines$set(Rlogo = function(options) {
out <- list("")
if (options$eval) {
path <- 'logo.jpg'
file.copy(file.path(R.home('doc'), 'html', 'logo.jpg'), path)
out <- list(knitr::include_graphics(path))
}
if (options$echo)
out <- c(out, options$code)
knitr::engine_output(
options,
out = out
)
})
```
```{Rlogo, echo = TRUE, eval = TRUE}
Whatever.
```
好的 - 我找到了解决方案:
--
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::knit_engines$set(Rlogo = function(options) {
result <- list(cose = "", out = "")
if (options$eval) {
path <- 'logo.jpg'
file.copy(file.path(R.home('doc'), 'html', 'logo.jpg'), path)
result$out <- knitr::engine_output(
options,
out = list(knitr::include_graphics(path))
)
}
if (options$echo)
result$code <- knitr::engine_output(
options,
code = options$code,
out = NULL
)
return(paste(result$code, result$out, sep = "\n\n"))
})
```
```{Rlogo, echo = TRUE, eval = TRUE}
Whatever.
```
有效,因为函数 knitr::engine_output()
只是 returns 一个字符串。这两个字符串只需要附加两个换行即可。