【问题标题】:Knitr and/or Kableextra: Global Table Options?Knitr 和/或 Kableextra:全局表选项?
【发布时间】:2019-05-02 17:49:19
【问题描述】:

是否可以指示 Rmarkdown 将所有表格默认为我的样式输出?这是我的尝试:

---
title: 'Test Kable Global Styling'
output:
  html_document:
    df_print: kable
---

```{r}
library(knitr)
library(kableExtra)
kable <- function(data) {
   message("YES, IT BITES!  (not sortable, but styled.)\n")
   knitr::kable(data, digits=3) %>% kable_styling(bootstrap_options = "striped", full_width = F, position = "center")
}

```


## Testing

```{r}
d <- data.frame( x=1:3, y=rnorm(3) )
```

### Explicit Invokation

```{r}
kable(d)
```

### Implicit Invokation Fails

```{r}
d
```

输出如下所示:

[可能与How to set knitr::kable() global options in markdown for reuse有关,但是定义我自己的kable函数还不够Rmarkdown选择它。


感谢神秘用户对上述问题的完整解决更新。唉,它可以概括为:

```{r}
library(knitr)
library(DT); p <- function(...) DT::datatable(...)
knit_print.data.frame <- function(x, ...) asis_output(  paste( c("",p(x)) , collapse="\n" )  )
registerS3method("knit_print", "data.frame", knit_print.data.frame)
```

# Test Code

```{r}
d <- data.frame( x=1:3, y=rnorm(3) )
```

## Print

```{r}
p(d)

d
```

done

【问题讨论】:

    标签: r-markdown


    【解决方案1】:

    如您所见,How to set knitr::kable() global options in markdown for reuse 描述了如何通过显式调用kable 来完成此操作,但不处理隐式显示。 ?knitr::knit_print 帮助页面中描述了这样做的方法。您需要在文档的早期编写这样的代码:

    kable <- function(data, ...) {
       message("YES, IT BITES!  (not sortable, but styled.)\n")
       knitr::kable(data, digits=3, ...) %>% kable_styling(bootstrap_options = "striped", full_width = F, position = "center")
    }
    knit_print.data.frame <- function(x, ...) {
      res <- paste(c("", "", kable(x)), collapse = "\n")
      asis_output(res)
    }
    registerS3method("knit_print", "data.frame", knit_print.data.frame)
    

    【讨论】:

    • 效果很好,但不能一概而论!? library(knitr); library(DT); p &lt;- function(...) DT::datatable(...); knit_print.data.frame &lt;- function(x, ...) asis_output( paste( c("",p(x)) , collapse="\n" ) ); registerS3method("knit_print", "data.frame", knit_print.data.frame); p(d) 工作,但没有 d。这可以概括吗?
    • 如果d 是一个数据框,它将起作用。如果是其他内容,您还需要在该类上设置 S3 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2014-10-03
    • 2019-06-07
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多