R将列表中的每个 `data.frame`打印到单独的表中,标题为 `data.frame`名称

标签 r tidyverse knitr purrr kableextra

想要将列表的每个 data.frame 打印到单独的表格中,标题为 data.frame 名称。我尝试的代码如下。它生成表格,但标题错误。

library(tidyverse)
library(kableExtra)
#> 
#> Attaching package: 'kableExtra'
#> The following object is masked from 'package:dplyr':
#> 
#>     group_rows

df1 <- data.frame(X = 1:3)
df2 <- data.frame(Y = 5:6)

ls1 <-
  list(df1, df2) %>% 
  set_names(c("df1", "df2"))

ls1
#> $df1
#>   X
#> 1 1
#> 2 2
#> 3 3
#> 
#> $df2
#>   Y
#> 1 5
#> 2 6

str(ls1)
#> List of 2
#>  $ df1:'data.frame': 3 obs. of  1 variable:
#>   ..$ X: int [1:3] 1 2 3
#>  $ df2:'data.frame': 2 obs. of  1 variable:
#>   ..$ Y: int [1:2] 5 6
names(ls1)
#> [1] "df1" "df2"

imap(
    .x = ls1
  , .f = ~ {
    kbl(
       x       = .x
     , format  = "markdown"
     , caption = names(.x)
    )
  }
)
#> $df1
#> 
#> 
#> Table: X
#> 
#> |  X|
#> |--:|
#> |  1|
#> |  2|
#> |  3|
#> 
#> $df2
#> 
#> 
#> Table: Y
#> 
#> |  Y|
#> |--:|
#> |  5|
#> |  6|

最佳答案

应该是.y。如果它是一个命名的列表/向量,则默认情况下名称位于.y中,值位于.x中,这类似于传递map2 中的两个参数。如果没有名称,则 .y 将返回 list

的序列索引
purrr::imap(
  .x = ls1
  , .f = ~ {
    kbl(
      x       = .x
      , format  = "markdown"
      , caption =.y
    )
  }
)  

-输出

$df1


Table: df1

|  X|
|--:|
|  1|
|  2|
|  3|

$df2


Table: df2

|  Y|
|--:|
|  5|
|  6|

关于R将列表中的每个 `data.frame`打印到单独的表中,标题为 `data.frame`名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71286570/

相关文章:

矩阵列表上的 R 冒号运算符

r - ggplot fiddle 情节不是在策划

r - 通过匹配相似模式的两列来分隔行

r - 使用 r 中的 `for loop` 函数将 `map` 翻译成 purrr

r - 如何用 knitr::spin 显示/打印汉字

r - 通过 includeMarkdown 包含覆盖内联代码的外部 markdown 文件

r - 使用 tidyverse 到 "unnest"小标题内的 data.frame 列

R 和 xml2 : how to read text that is not in children nodes and read information even if node is missing

r - 如何使用其他列中的值作为键来减去特定列的值

r - 如何在 R Markdown 中突出显示内联 R 代码?