R:使用管道在 kable 内部循环,同时还将输出管道输出到下一步 (group_rows)

R: loop inside kable with pipe while also piping output to next step (group_rows)

我正在使用 kable 并为大约 500 个数据集创建表格,因此我正在尝试创建一个脚本并在其上循环。让我感到困惑的一件事是我正在使用 group_rows 选项,尽管组的数量会在数据集之间发生变化。如何设置 R 脚本来考虑这一点。

这是我的脚本,目前在 kable 命令中使用正常循环,但不起作用...

[数据集 grps 是用于确定组的预定义标准]

对于下面的代码,grps & color 数据集如下。他们根本没有连接到 mtcars

grps <- 
structure(list(no.cars = c(2,1,2), maincars = c("Mazda", 
"Datsun", "Hornet"), start = c(1, 3, 4),
 end = c(2L, 3L, 5L)), .Names = c("no.cars", "maincars", 
"start", "end"), row.names = c(NA, -3L), class = "data.frame")

color <- structure(list(color=c("#20324C", "#D2A8A4", "#FFC65A")),.Names = c("color"), row.names = c(NA, 
-3L), class = "data.frame")

mtcars[1:5,] %>% 
    knitr::kable(format="html")%>% 
    kable_styling("striped", full_width = F) %>%
    for(g in 1:nrow(grps)){
        group_rows(grps$maincars[g], grps$start[g], grps$end[g],label_row_css = paste0("background-color: ",color[g,1],"; color: #F1F1F1;")) %>% .()
    } %>% as_image()

因此,它没有创建任何组。我很好奇我是否可以尝试其他选择?

谢谢

考虑一个非管道解决方案:

sub <- mtcars[1:5,]
sub <- knitr::kable(sub, format="html")
sub <- kable_styling(sub, "striped", full_width = FALSE) 

for(g in 1:nrow(grps)){
   sub <- group_rows(sub, grps$maincars[g], grps$start[g], grps$end[g],
                     label_row_css = paste0("background-color: ", color[g,1],
                                            "; color: #F1F1F1;")
                    )
}

as_image(sub)

或者使用管道,合并用户定义的方法:

run_group_rows <- function(x){
    for(g in 1:nrow(grps)){
       x <- group_rows(x, grps$maincars[g], grps$start[g], grps$end[g],
                         label_row_css = paste0("background-color: ", color[g,1],
                                                "; color: #F1F1F1;")
                       )
    }
    return(x)
}

mtcars[1:5,] %>% 
    knitr::kable(format="html")%>% 
    kable_styling("striped", full_width = FALSE) %>%
    run_group_rows() %>% 
    as_image()