通过修改默认输出挂钩选择块输出中的输出行

时间:2014-01-07 21:17:50

标签: hook output knitr

针织书,p。 118,\ S 12.3.5,举例说明如何通过修改来抑制长输出 输出块挂钩,但它根本不是通用的,因为它对所有块都是全局的。

我试图概括一下,允许一个块选项output.lines,如果为NULL,则没有 效果,但否则只选择并打印第一行output.lines行。但是,这个版本 当我尝试它似乎没有任何影响,我无法弄清楚如何告诉为什么。

更一般地说,我认为这很有用,可以包含在knitr中,如果有的话会更好 可以使用output.lines=3:15指定一系列行,例如echo=

# get the default output hook
hook_output <- knit_hooks$get("output")

knit_hooks$set(output = function(x, options) {
    lines <- options$output.lines
    if (is.null(lines)) {
        hook_output(x, options)  # pass to default hook
    }
    else {
        x <- unlist(stringr::str_split(x, "\n"))
        if (length(x) > lines) {
        # truncate the output, but add ....
        x <- c(head(x, lines), "...\n")
        }
        # paste these lines together
        x <- paste(x, collapse = "\n")
        hook_output(x, options)
    }
})

测试用例:

<<print-painters, output.lines=8>>=
library(MASS)
painters
@

1 个答案:

答案 0 :(得分:2)

实际上,此解决方案确实有效。我的实际测试示例存在缺陷。也许其他人会觉得这很有帮助。