【发布时间】:2017-12-28 16:08:03
【问题描述】:
我有我想要两个写入 xlsx 文件的数据列表和绘图列表(每个元素到单独的工作表)。示例数据:
require(ggplot2)
require(data.table)
n <- 10
N <- 100
dtList <- lapply(1:n, function(x) data.table(sample(1e6, N), 1:N))
names(dtList) <- 1:n
plots <- lapply(dtList, function(x) ggplot(x, aes(y = V1, x = V2)) + geom_line())
目前我使用openxlsx,但是对于多个绘图来说它很慢:
require(openxlsx)
wb <- createWorkbook()
modifyBaseFont(wb, fontSize = 10)
writeXlsx <- function(x, sName) {
addWorksheet(wb, sName, gridLines = FALSE)
writeData(wb, sName, x = x, xy = c(1, 1))
print(plots[[sName]])
insertPlot(wb, sName, width = 19, height = 9, dpi = 200, units = "cm",
startRow = 2, startCol = 5)
}
system.time(
sapply(seq_along(dtList), function(x) {
writeXlsx(dtList[[x]], names(dtList)[[x]])
})
) # ~ 17.00 sek
openXL(wb)
我怎样才能提高这个速度?有没有更好的package 来实现这一点?
【问题讨论】:
-
XLConnect做了很多事情。也许结帐那个。 -
我为此使用了
xlsx和r2excel。我不知道哪个更快,但值得一试。不过,您需要在计算机上安装 Java 才能完成这项工作。 -
您也可以考虑使用
rvg和officer包来编写图表的矢量版本。我不知道这些是否会更快生成,但图表会看起来更清晰,可以在 excel 中编辑,并且文件会更小。 -
是否可以选择安装其他 siftware,例如 BERT:bert-toolkit.com/r-graphics-in-excel?
标签: r excel performance ggplot2 xlsx