我正在尝试使用行
读取存储在网络驱动器上的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)
我尝试将文件从网络驱动器复制/粘贴到我的桌面上并读取它,但是这会引发同样的错误。
但是,将文件移动到我的桌面,并使用“另存为”,并将其另存为新文件,这样我就可以正常阅读。
有没有人知道这里发生了什么?
答案 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