grid.draw()给出了;对象';d';“未找到”;加载gridExtra时出错

grid.draw()给出了;对象';d';“未找到”;加载gridExtra时出错,r,gridextra,r-grid,R,Gridextra,R Grid,我用tableGrob生成了一个20Cx10R表,发现速度非常慢。因此,我试图找出原因。巴普蒂斯特本人在信中提到了原因 我试过他的例子:。初始运行良好,即他的示例中的表生成得非常快 但是,当我尝试从ggplot加载gridExtra以添加绘图时,grid.draw(g)生成了以下错误:as.matrix(d)中的错误:找不到对象“d” 我的代码在这里(从baptiste的原始代码稍作修改): 库(网格) 库(gridExtra)#注意:稍后加载gridExtra与grid.draw(g)碰撞 a

我用tableGrob生成了一个20Cx10R表,发现速度非常慢。因此,我试图找出原因。巴普蒂斯特本人在信中提到了原因

我试过他的例子:。初始运行良好,即他的示例中的表生成得非常快

但是,当我尝试从ggplot加载gridExtra以添加绘图时,
grid.draw(g)
生成了以下错误:
as.matrix(d)中的错误:找不到对象“d”

我的代码在这里(从baptiste的原始代码稍作修改):

库(网格)
库(gridExtra)#注意:稍后加载gridExtra与grid.draw(g)碰撞

aa加载gridExtra时,会为类“table”的对象带来一个drawDetails方法(由grid.draw调用),该方法与此gTree不兼容(它缺少一些属性)。简而言之,您只需删除gTree中的
cl=“table”
,或者选择另一个名称。

@SlowLearner新类只有在您为其定义方法时才有用,否则grid.draw默认为泛型GTreeBaptiste的父方法,我使用
foo
进行测试纯粹是自反性的,没有涉及任何思想。真的有点像我的其他代码。谢谢,@baptiste,它能工作!(好吧,除了你还有谁最了解gridExtra!=))。但是我能麻烦你解释一下为什么在代码中添加这一行吗?我的意思是,将g定义为“table”是否有实际用途,因为我们通常只调用grid.draw(g)?@nearyprog它就在那里,我可能一开始以为我需要一个自定义的draw方法,后来就忘了它。我已经相应地更新了RPUB。我明白了。好极了,又一个宇宙之谜解开了!再次感谢你的帮助,巴蒂斯特!
library(grid)
library(gridExtra)  # NOTE: Loading gridExtra clashes w grid.draw(g) later

aa <- head(iris, 10)
padding = unit(4, "mm")

nc <- ncol(aa)
nr <- nrow(aa)

extended_matrix <- cbind(c("", rownames(aa)), rbind(colnames(aa), as.matrix(aa)))
w <- apply(extended_matrix, 2, strwidth, "inch")
h <- apply(extended_matrix, 2, strheight, "inch")

widths <- apply(w, 2, max)
heights <- apply(h, 1, max)

padding <- convertUnit(padding, unitTo = "in", valueOnly = TRUE)

x <- cumsum(widths + padding) - 0.5 * padding
y <- cumsum(heights + padding) - padding

rg <- rectGrob( x = unit(x - widths/2, "in"), y = unit(1, "npc") - 
                 unit(rep(y, each = nc + 1), "in"), 
               width = unit(widths + padding, "in"), 
               height = unit(heights + padding, "in") )
tg <- textGrob( c(t(extended_matrix)), x = unit(x - widths/2, "in"), 
               y = unit(1, "npc") - unit(rep(y, each = nc + 1), "in"), 
               just = "center" )

g <- gTree( children = gList(rg, tg), x = x, y = y, widths = widths, 
           heights = heights, cl = "table", 
            gp=gpar(fill = rep(c("grey90", "grey95"), each = 2)))

l <- linesGrob()
grid.draw(l)  # Added to show that grid.draw works here...

grid.draw(g)  # ... but not here *confused*
invisible(g)

grid.arrange( g, g, ncol=2)  # I eventually hope to use ggplot2 w the tables drawn with grid.draw

## End of code ##