输出挂钩(*)
使用针织物包中,您可以控制代码块的每一段输出,例如源代码、文本输出、消息和绘图。控制是通过“输出挂钩”实现的。输出挂钩是一系列函数,它们将一段输出作为输入(通常是字符向量),并返回要写入输出文档的字符向量。目前这可能不容易理解,但希望您可以通过下面的一个小示例更清楚地了解这个想法,该示例解释了如何通过针织物的输出挂钩。
用一行代码考虑这个代码块:
之后针织物计算代码块,它得到两个输出元素,并且两者都存储为字符串:源代码"1 + 1"
,以及文本输出"[1] 2"
。这些字符串将由块挂钩进一步处理,以获得所需的输出格式。例如,对于降价文档,针织物将把源代码包装在一个带有语言名称的隔离代码块中。这是通过来源
钩子,它或多或少类似于此函数:
#对于上述情况,“x”是字符串“1”+
# 1'
功能(x,选项){
#这里的小“r”表示语言名称
粘贴(c(c)(“``r”,x,"```"),坍塌= "\n个")
}
类似地,文本输出由输出
看起来像这个函数的钩子:
功能(x,选项){
粘贴(c(c)(“```”,x,"```"),坍塌= "\n个")
}
因此,上述代码块的最终输出是:
```第页
1 + 1
```
```
[1] 2
```
实际的钩子比上面的两个函数更复杂,但其思想是相同的。您可以从对象中获得实际的钩子编织钩
通过获取()
方法,例如。,
#对于有意义的输出,下面的代码应该是
#在knitr文档的代码块内执行
针织物::编织钩$得到(“源”)
针织物::针织品_书籍$得到(“输出”)
#或knitr::knit_hooks$get(c('source','output'))
除非你真的有兴趣为针织物包中,我们不建议您阅读这些内置挂钩的源代码。如果您感兴趣,可以在表单中命名的脚本中找到此代码挂钩-*。R(右)
在https://github.com/yihui/knitr/tree/master/R网站(例如。,挂钩-md.R
包含R Markdown文档的挂钩)。作为一个针织物用户,如果您知道如何利用内置挂钩创建自定义输出挂钩,通常就足够了。您将在本章的几个示例中了解到这一点,我们将在下面展示基本思想。
自定义输出挂钩通过设置()
方法编织钩
。因为此方法将覆盖现有的默认挂钩,所以我们建议您保存现有挂钩的副本,以自己的方式处理输出元素,并将结果传递给默认挂钩。通常的语法是:
#在这里使用local()是可选的(我们只想
#避免创建不必要的全局变量,如
#`hook_old`)
地方的({
挂钩(_O)<-针织物::针织品_书籍$得到(“名称”)#保存旧钩子
针织物::编织钩$设置(名称= 功能(x,选项){
#现在对x做你想做的任何事情,然后通过
#新x到旧hook
挂钩(_O)(x,选项)
})
})
在这里,名称
是挂钩的名称,可以是以下值之一:
来源
:正在处理源代码。
输出
:正在处理文本输出。
警告
:正在处理警告(通常来自警告()
)。
消息
:处理消息(通常来自消息()
)。
错误
:处理错误消息(通常来自停止()
)。
情节
:正在处理打印文件路径。
内联
:处理内联R表达式的输出。
块
:处理整个块的输出。
文件
:处理整个文档。
论点的含义x个
钩子中的函数在上面的列表中进行了解释。对于选项
参数,它表示当前代码块的块选项(作为列表)。例如,如果您设置foo=真
在块上,可以通过以下方式获取其值选项$foo
在钩子里。这个选项
参数对不可用内联
和文件
挂钩。
输出挂钩使您能够最终控制块和文档输出的每一块。与通常具有预定义用途的块选项相比,输出挂钩功能更强大,因为它们是用户定义的函数,您可以在函数中执行任何操作。