我使用tableGrob生成了一个20Cx10R表,发现它很慢。我因此试图找出原因。巴蒂斯特自己在Has anyone else noticed that tableGrob is slow?中提到了原因。
我尝试了他的例子:http://rpubs.com/baptiste/ftableGrob。初始运行良好,即他的示例中的表非常快速地生成。
但是当我尝试加载gridExtra来添加ggplot的图表时, grid.draw(g)
生成了此错误:Error in as.matrix(d) : object 'd' not found
我的代码在这里(稍微修改了baptiste的原文):
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 ##
我对此进行了研究,但没有找到类似的报道/帖子。我怀疑这是由于我对gridExtra的理解不足,所以我在SO中提出这个问题来寻求“启蒙”。如果有人可以提供帮助,我将不胜感激!
旁白:由于baptiste的原始代码也使用'd',在将'd'切换为'aa'之后,R仍然尖叫着“对象''未找到!”。想象一下我的困惑!
最后,祝大家新年快乐(2014)!
答案 0 :(得分:2)
当你加载gridExtra时,你带来了一个drawDetails方法(由grid.draw调用),用于类“table”的对象,它与这个gTree不兼容(它没有一些属性)。要缩短故事,您只需删除gTree中的cl = "table"
,或选择其他名称。