【问题标题】:Knitr: Show source code of inline code chunksKnitr:显示内联代码块的源代码
【发布时间】:2017-06-25 23:12:06
【问题描述】:

例如,在编写演讲幻灯片时,我们经常会遇到这样一种情况,即我们希望将内联代码输出为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

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    我想通过修改钩子可以实现你想要的,但是仅仅修改内联钩子是不够的,因为传递给内联钩子的唯一参数已经是评估结果,没有任何其他参数。而且修改很多钩子风险太大,不值得。这是一些不费吹灰之力就能实现你想要的东西。例如,您可以在 knitr 设置块中定义以下函数 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 成语。

    【讨论】:

    • 谢谢!没有考虑过使用通话记录。这绝对比我迄今为止看到和尝试过的任何东西都要好。
    • 一个更常见的R成语是deparse(substitute(x))而不是deparse(sys.call()[[2]]
    • @user2554330 非常感谢。我对我的答案进行了相应的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多