R:带管道内部的循环,同时将管道输出到下一步(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()

相关内容

最新更新