【问题标题】:Rmarkdown: how to show partial output from chunk?Rmarkdown:如何显示块的部分输出?
【发布时间】:2018-06-25 11:38:10
【问题描述】:

我有一个 Rmarkdown 文档,我想只显示代码块的部分输出。

例如,考虑以下情况:

```{r echo=1:2, eval=-2, collapse=TRUE}
mod <- lm(speed ~ dist, data = cars)
summary(mod)
out <- capture.output(summary(mod))
cat(c("[...]", out[9:12], "[...]"), sep = "\n")
```

产生

mod <- lm(speed ~ dist, data = cars)
## summary(mod)
## [...]
## Coefficients:
##             Estimate Std. Error t value         Pr(>|t|)    
## (Intercept)  8.28391    0.87438   9.474 0.00000000000144 ***
## dist         0.16557    0.01749   9.464 0.00000000000149 ***
## [...]

但我想得到的是

mod <- lm(speed ~ dist, data = cars)
summary(mod)
## [...]
## Coefficients:
##             Estimate Std. Error t value         Pr(>|t|)    
## (Intercept)  8.28391    0.87438   9.474 0.00000000000144 ***
## dist         0.16557    0.01749   9.464 0.00000000000149 ***
## [...]

查看summary(mod)的不同格式。

【问题讨论】:

    标签: r knitr r-markdown


    【解决方案1】:

    这是我的问题的解决方案

    ---
    output: html_document
    ---
    
    ```{r, echo=FALSE}
    library(knitr)
    # the default output hook
    hook_output <- knit_hooks$get('output')
    knit_hooks$set(output = function(x, options) {
      if (!is.null(n <- options$out.lines)) {
        n <- as.numeric(n)
        x <- unlist(stringr::str_split(x, "\n"))
        nx <- length(x) 
        x <- x[pmin(n,nx)]
        if(min(n) > 1)  
          x <- c(paste(options$comment, "[...]"), x)
        if(max(n) < nx) 
          x <- c(x, paste(options$comment, "[...]"))
        x <- paste(c(x, "\n"), collapse = "\n")
      }
      hook_output(x, options)
        })
    ```
    
    ```{r collapse=TRUE, out.lines = 9:12}
    mod <- lm(speed ~ dist, data = cars)
    summary(mod)
    ```
    
    ```{r collapse=TRUE, out.lines = 1:3}
    summary(mod)
    ```
    
    ```{r collapse=TRUE, out.lines = 17:18}
    summary(mod)
    ```
    
    ```{r collapse=TRUE, out.lines = 1:20}
    summary(mod)
    ```
    

    【讨论】:

      【解决方案2】:

      knitr example 052 应该给你一个基本的想法:定义output 钩子,你可以以任何你想要的方式操作文本。

      knitr::knit_hooks$set(output = function(x, options) {
        # manipulate x here
      })
      

      【讨论】:

      • 感谢谢指出这个例子。我能够得到我想要达到的目标。我在第一篇文章中报告了我的解决方案,以防其他人需要它。
      • 请随意发布它作为您自己问题的答案,并接受答案,这样它就不再是一个悬而未决的问题了。
      • 是的,我想您需要等待几个小时才能接受您的回答。
      猜你喜欢
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 2021-08-20
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      相关资源
      最近更新 更多