Думаю, я понял это в конце концов. Хитрость заключается в том, чтобы установить оба крючка inline
и evaluate.inline
. Ниже evaluate.inline
- это отредактированная функция по умолчанию, которая добавляет try()
к оценке. Затем ловушка inline
проверяет выходной класс и, если это "try-error"
, возвращает объект as.vector
(без атрибутов):
knitr::knit_hooks$set(
evaluate.inline = function (code, envir = knit_global()) {
v = try(eval(xfun::parse_only(code), envir = envir))
knitr::knit_print(v, inline = TRUE, options = knitr::opts_chunk$get())
},
inline = function(x) {
if (any(class(x) == "try-error")) {
as.vector(x)
} else x
})
Надеюсь, другие сочтут это полезным.