knit engine for graphs не показывает код и результат одновременно - PullRequest
0 голосов
/ 18 июня 2020

Это продолжение { ссылка }

Я хотел бы включить график и код.

Итак, у меня есть следующий файл Rmd который должен выводить график (в зависимости от eval) и код (в зависимости от echo), но вместо графика он дает имя файла.

Как я могу это сделать, чтобы он показывал график и код? Я думал, что это внутренне контролируется options, переданным в knitr::engine_output(), но как только 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.
```

Ответы [ 2 ]

1 голос
/ 18 июня 2020

ОК - я нашел решение:

--
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() просто возвращает строку. К этим двум строкам просто нужно добавить два перевода строки.

0 голосов
/ 18 июня 2020

Попробуйте следующее:

---
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.
```

...