【问题标题】:r - rmarkdown - render list of dataframesr - rmarkdown - 渲染数据帧列表
【发布时间】:2015-09-27 19:43:30
【问题描述】:

是否可以将 Markdown 文档中的数据框列表呈现为单独的表格?

示例

给定代码块

```{r listOfDf}

library(knitr)

df <- data.frame(a=rnorm(10),b=rnorm(10),c=c(rep("a",5), rep("b",5)))
l_df <- split(df, df$c)

kable(l_df)

```

这个输出

但我想要更接近 R 控制台中给出的内容:

> l_df
$a
           a          b c
1  1.2869909 -0.3117932 a
2  1.4621792  1.2826924 a
3 -0.4274641  0.3335532 a
4  0.7882973 -1.1966702 a
5 -1.2086910  0.1549691 a

$b
            a         b c
6  -0.9460508 1.4679430 b
7   0.6580554 0.5806850 b
8  -0.7103335 2.6036176 b
9  -2.0110167 2.0488055 b
10  0.7691045 0.3652907 b

但这也呈现为一个表格(因此使用kable()

我试过循环*

for(i in 1:length(l_df)){
  kable(l_df[i])
}

但这也不起作用(*但它确实适用于图表)

【问题讨论】:

  • 只是不使用 kable?
  • @rawr 我还希望将输出呈现为表格,而不仅仅是数据的打印,因此kable
  • 哦,那我会改变我的评论,使用 kable 像 print(kable(l_df[[i]]))
  • 似乎 kable 正在打印行名(pander 的答案在下面做同样的事情)当行名是 not 1:n 时,这对我来说看起来很奇怪。您可以使用 print(kable(`rownames&lt;-`(l_df[[i]], NULL))) 在您的 kable 选项中修复该问题,或者您可以先执行此操作 l_df &lt;- lapply(l_df, function(x) `rownames&lt;-`(x, NULL)),这将适用于 kable 或 pander 选项
  • @rawr 最后我选择了print(kable(l_df[[i]])) 选项;谢谢你的建议。如果你想让它成为一个答案,我会给它一个“勾号”

标签: r r-markdown


【解决方案1】:

pander 包已创建到 transform almost any R objects into markdown。例如:

> pander(l_df)


  * **a**:

    -------------------------
        a          b       c
    ---------- ---------- ---
    0.5853656  1.3888279   a

    -0.6172632 -0.5179708  a

    -0.3321862 -0.2400778  a

    -0.6503349 0.9474224   a

    0.9476588  0.2288404   a
    -------------------------

  * **b**:

    -------------------------------------
     &nbsp;       a            b       c
    -------- ------------ ----------- ---
     **6**   -0.637650387 0.26547037   b

     **7**   0.233576764  -0.47811415  b

     **8**   -0.283486652 0.61113065   b

     **9**   -0.794994493 -0.08609191  b

     **10**  -0.004526202 0.36841059   b
    -------------------------------------


<!-- end of list -->

【讨论】:

    【解决方案2】:

    我将此功能与{r results='asis'}一起使用

    affiche_multi_df <- function(b){
      for ( i in seq_along(b)){
        cat(glue::glue("### {names(b)[i]} \n\n"))
        b[[i]] %>%
          DT::datatable() %>%
          htmltools::tagList() %>%
          print()
    
      }}
    

    喜欢这个

    ```{r results='asis'} 
    list(a=iris,b=iris,c=iris) %>%  affiche_multi_df() 
    ```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2017-09-17
      • 2023-04-03
      • 1970-01-01
      • 2021-02-05
      • 2016-11-09
      • 2022-01-01
      相关资源
      最近更新 更多