Можно ли избежать оценки встроенных фрагментов Rmarkdown `r code`? - PullRequest
2 голосов
/ 08 января 2020

В виньетке, демонстрирующей, как использовать пакет Suggested, у меня есть что-то вроде этого:

if (suggested_package_not_available) {
  knitr::opts_chunk$set(eval = FALSE)
}

Это означает, что виньетка все еще работает et c. хотя пакет Suggested недоступен. Он просто показывает код, а не результаты.

Могу ли я сделать что-то подобное для встроенного R кода (`r code`)?

Может быть, ловушка, которая использует регулярное выражение (а-ля `r [^`]+`) добавить два обратных бекака вокруг встроенного кода, чтобы вместо оценки оценивался встроенный код (что обычно приводило бы к ошибке, поскольку блоки больше не оценивались)?

Ответы [ 2 ]

4 голосов
/ 08 января 2020

Уловка может заключаться в том, чтобы напечатать строку или оценить выражение:

check_code <- function(expr, available){
  if(available){
    eval(parse(text = expr))
  } else {
    expr
  }
}
check_code("1+1", TRUE)
check_code("1+1", FALSE)
0 голосов
/ 08 января 2020

Похоже, двойные обратные кавычки до и после, а также разрыв строки сразу после того, как сработает `r.

Более подробное объяснение на сайте yihui: https://yihui.org/knitr/faq/ (# 7 )

Для встроенного кода R вы можете использовать функцию knitr :: inline_expr () (доступно в knitr> = v1.8). Если вы пишете документ R Markdown, вы можете использовать хитрость: разбить строку сразу после `r (без пробелов после нее) и обернуть все встроенное выражение в пару двойных обратных кавычек, например,

Это покажет дословно действующее выражение R `r 1+1` в выходных данных.

...