在R中读取XLSX文件时出错

时间:2016-12-09 19:10:36

标签: java r

我正在尝试使用行

读取存储在网络驱动器上的1 MB XLSX文件
options(java.parameters="-Xmx4g")
library(rJava) 
library(xlsx) 
jgc <- function() {
  gc()
  .jcall("java/lang/System", method = "gc")
}    
jgc()
folder <- 'network_drive/State_Stuff/'  
state <- 'MI'
xlsx_in<- read.xlsx2(paste(folder, state,"_data.xlsx", sep = ""),
                  sheetName = "sheet1",
                  colClasses = c(rep("numeric",8), "character"))

我收到以下错误。

Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException

我正在运行Windows7 64位RStudio,并运行java -version返回

java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

我尝试将文件从网络驱动器复制/粘贴到我的桌面上并读取它,但是这会引发同样的错误。

但是,将文件移动到我的桌面,并使用“另存为”,并将其另存为新文件,这样我就可以正常阅读。

有没有人知道这里发生了什么?

3 个答案:

答案 0 :(得分:5)

尝试使用library(readxl) folder <- 'network_drive/State_Stuff/' state <- 'MI' xlsx_in<- read_excel(paste(folder, state,"_data.xlsx"), sheet = "sheet1", col_types = c(rep("numeric",8), "text")) 包。它并不依赖于java。

例如:

struct unary_function {
  typedef int argument_type;
  typedef bool result_type;

protected:
  ~unary_function() {
      std::cout << "unary_function" << std::endl;
  }
};

struct IsOdd : public unary_function {
public:
  bool operator()(int number) { return (number % 2 != 0); }
};

void f(unary_function *f) {
  // compile error
  // delete f;
}

int main(int argc, char **argv) {
  // unary_function *a = new IsOdd;
  // delete a;

  IsOdd *a = new IsOdd;
  delete a;

  getchar();
  return 0;
} // main

答案 1 :(得分:0)

今天,我遇到了一个与同事收到的文件相同的问题,并在寻找解决方案时碰到了这篇文章。切换到其他库并不是真正的解决方案,如果您习惯使用xlsx,则readxl会有意外的行为。

我能够通过在Excel中打开文件并将其重新保存来解决该问题。不知道问题是否由特定版本的Excel或其他任何原因引起。我可以从同一个同事那里读取相似的文件。

答案 2 :(得分:0)

使用了gc()(垃圾收集)并且可以正常工作。

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/gc