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()
我正在使用 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()