Knitr:显示内联代码块的源代码

时间:2017-06-25 23:12:06

标签: r knitr r-markdown

例如,在编写讲座幻灯片时,我们经常遇到一种情况,我们希望内联代码输出为source code = result。例如,

"foofoofoo qt(p = 0.95, df = 24) = 1.710882 barbarbar"

\Sexpr{qt(p = 0.95, df = 24)}仅提供该输出的第二部分。其中一个解决方法是

\Sexpr{highr::hi_latex('qt(p = 0.95, df = 24)')} $=$ \Sexpr{qt(p = 0.95, df = 24)} 

使用起来有点不舒服。

问题1:还有其他解决方案吗?

问题2:

内联钩子只允许我们更改评估结果的格式(所以应该如何显示上面的1.710882。)

是否可以将\Sexpr{}中的源代码作为内联钩子中的选项提供?然后我可以轻松地将内联输出定义为source = result

1 个答案:

答案 0 :(得分:4)

我想通过修改钩子可以实现你想要的东西,但是只修改内联钩子是不够的,因为传递给内联钩子的唯一参数已经是评估结果而没有任何其他参数。修改很多钩子太冒险了,不值得。这是一个可以轻松实现您想要的东西的东西。例如,您可以在knitr setup chunk中定义以下函数s

s <- function(x){
    paste0(deparse(substitute(x)), " = ", x)
}

然后您可以使用r s(qt(p = 0.95, df = 24))\Sexpr{s(qt(p = 0.95, df = 24))}之类的内容来获得所需的结果。

编辑:更复杂的方式可能是:

s <- function(x){
    paste0(deparse(substitute(x)), " = ", knitr::knit_hooks$get("inline")(x))
}

这个版本的s会将您的舍入数字结果作为默认的内联钩子。

修改:感谢@ user2554330,我将deparse(sys.call()[[2]]更改为deparse(substitute(x)),跟随更常见的R惯用法。