我想知道是否有人知道从“大” xlsx文件(〜20Mb)导入数据的方法。我尝试使用xlsx和XLConnect库。不幸的是,它们都使用rJava,并且我总是会遇到相同的错误:

> library(XLConnect)
> wb <- loadWorkbook("MyBigFile.xlsx")
Error: OutOfMemoryError (Java): Java heap space

要么
> library(xlsx)
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  :
   java.lang.OutOfMemoryError: Java heap space

我还尝试在加载rJava之前修改java.parameters:
> options( java.parameters = "-Xmx2500m")
> library(xlsx) # load rJava
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  :
   java.lang.OutOfMemoryError: Java heap space

或加载rJava之后(我认为这有点愚蠢):
> library(xlsx) # load rJava
> options( java.parameters = "-Xmx2500m")
> mydata <- read.xlsx2(file="MyBigFile.xlsx")
Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  :
   java.lang.OutOfMemoryError: Java heap space

但是没有任何效果。有人有主意吗?

最佳答案

当有人给我(另一个)Excel文件进​​行分析时,我偶然发现了这个问题。这个甚至还没有那么大,但是由于某种原因,我遇到了类似的错误:

java.lang.OutOfMemoryError: GC overhead limit exceeded

基于@Dirk Eddelbuettel在先前答案中的评论,我安装了openxlsx软件包(http://cran.r-project.org/web/packages/openxlsx/)。然后运行:
library("openxlsx")
mydf <- read.xlsx("BigExcelFile.xlsx", sheet = 1, startRow = 2, colNames = TRUE)

这正是我想要的。易于使用和邪恶的快速。这是我的新 friend 。感谢小费@Dirk E!

顺便说一句,我不想​​从Dirk E那里窃取这个答案,所以如果他发布答案,请接受它而不是我的!

09-04 20:01