在循环中串行使用时,tableGrob对象的组合会失败吗?

时间:2016-09-28 13:45:04

标签: r gridextra

每个人我都试图在新数据到达时动态构建tableGrob对象,并在我可以使用时生成结果。以下是我尝试生成此类表但由于某种原因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对象中的表。

enter image description here

为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:1)

联合函数系列主要是实验性的;我从gtable那里偷了它,它有更多的bug,但它还没有完全发挥作用。 逻辑IIRC是基于行/列名称对齐的。这是组合g1表有问题的地方,因为它的行名称不是唯一的。修复它们,它工作正常,

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

enter image description here

(不用说,欢迎PR)

答案 1 :(得分:0)

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

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)

你可以破解它并在两个数据框之间用你想要的标题排成一行