在循环中连续使用时,在 tableGrob 对象上组合失败?

Combine on tableGrob objects fails when used serially in a loop?

每个人我都在尝试构建 table当新数据到达时动态地抓取对象,当它们可用时我生成结果。这是我尝试生成这样的 tables 但由于某种原因 combine() 函数没有按预期工作。

我的代码如下:

library(gridExtra)
library(grid)
library(ggplot2)

alphabets <- c(rep("A", 3), rep("B", 3), rep("C",3))
numbers <- c(rep(c(1,2,3), 3))

df1 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df2 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df3 <- data.frame(alphabets = alphabets,numbers=numbers)

tab1 <- tableGrob(df1,theme = ttheme_default(),row=NULL)
tab2 <- tableGrob(df2,theme = ttheme_default(),row=NULL)
tab3 <- tableGrob(df3,theme = ttheme_default(),row=NULL)

g1 <- combine(tab1,tab2,along = 2)# 1st combine operation 
g2 <- combine(g1,tab3,along = 1)#second combine operation

grid.arrange(g2)

输出缺少来自 g1 tableGrob 对象的 table。

知道为什么会这样吗?

你可以像这样绑定两个数据框吗?

alphabets <- c(rep("A", 3), rep("B", 3), rep("C",3))
numbers <- c(rep(c(1,2,3), 3))

df1 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df2 <- data.frame(alphabets = alphabets[1:4],numbers=numbers[1:4])
df3 <- data.frame(alphabets = alphabets,numbers=numbers)

tab1 <- tableGrob(df1,theme = ttheme_default(),row=NULL)
tab2 <- tableGrob(df2,theme = ttheme_default(),row=NULL)
tab3 <- tableGrob(df3,theme = ttheme_default(),row=NULL)

df4 <- rbind(df1,df2)
tab4 <- tableGrob(df4,theme = ttheme_default(),row=NULL)

g2 <- combine(tab4,tab3,along = 1)#second combine operation
grid.arrange(g2)

你可以破解它并在两个数据框之间用你想要的header划一行

combine 系列函数在很大程度上是实验性的;我从 gtable 那里偷了它,它还有一些错误,但它仍然没有完全发挥作用。 IIRC 的逻辑是根据 row/column 名称进行对齐。这是合并的 g1 table 有问题的地方,因为它的行名称不是唯一的。修复它们,它工作正常,

g1$rownames <- paste0("r", seq_len(nrow(g1)))

(不用多说,欢迎PR)