【问题标题】:Conflict with xlsx package and choose.files与 xlsx 包和 choose.files 冲突
【发布时间】:2012-11-22 11:34:16
【问题描述】:

我在加载 xlsx 包和使用 choose.files 时遇到了一个奇怪的问题。

当我将 RStudio 更新到最新版本 (v0.97.237) 后,这个问题就开始了。如果我启动 RStudio,然后加载 xlsx(即library(xlsx)),包加载就好了。但是,如果我然后尝试使用choose.files(),RStudio 会冻结(实际上它会持续运行,并且如果不使用 Win7 任务管理器结束它就无法关闭)。如果我启动 RStudio 并首先使用 choose.files,它工作得很好。如果我然后运行library(xlsx) 行,xlsx 包将不会加载。它给出了以下错误。

我尝试重新安装 xlsx 包(连同 xlsxjars 和 rJava),但没有成功。也没有重新安装 Java。

有什么建议吗?我正在使用 R v2.15.2。

library(xlsx)  
Loading required package: xlsxjars  
Loading required package: rJava  
Error occurred during initialization of VM  
Could not reserve enough space for object heap  
Error : .onLoad failed in loadNamespace() for 'xlsxjars', details:  
  call: .jinit()  
  error: Cannot create Java virtual machine (-4)  
Error: package ‘xlsxjars’ could not be loaded  

编辑: 这就是问题所在。很抱歉有任何混淆。当我输入这个时:

filename<-file.choose() #select file
library(xlsx)
mydata<-read.xlsx(filename,1) #load datafile

我可以成功选择文件名,但是xlsx包无法加载所以我无法打开数据文件。我得到上面的错误。但是,如果我改为运行它(在我关闭并重新启动 RStudio 之后):

library(xlsx)
filename<-file.choose() #select file
mydata<-read.xlsx(filename,1) #load datafile

xlsx 包正确加载,但file.choose 导致 R 无限期运行,因此脚本冻结,我无法加载我的文件。使用choose.files() 也是如此。我不知道为什么这两个东西(xlsx 和file.choose/choose.files)会发生冲突,但似乎它们是因为我只能使用一个或另一个,这取决于我首先使用哪一个。

编辑 2: 我已经在另一台计算机(相同的操作系统,相同版本的 R、RStudio 和 Java)上尝试过,但遇到了同样的问题。

编辑 3: 我转换回 RStudio v0.97.90,问题就消失了。我猜这是 RStudio 的问题。

【问题讨论】:

  • 看起来你的 Java 安装问题比 R 的问题更大。添加标签。您应该记录 Java 的版本号。这与choose.files 没有明显联系。
  • 如果我不使用 choose.files,xlsx 包会加载并完美运行。 xlsx 唯一不起作用的情况是,如果我在使用 choose.files 后尝试加载它。我有 Java 版本 1.7.0_09
  • “在我用过choose.files 后使用它”是什么意思?有一个名为file.choose 的基本函数。
  • 问题是 C 堆栈大小在 R 2.15.2 中从 10MB 增加到 64MB(由于此类错误,在 R 3.x.x 中减少到 16MB)。在调用 file.choose() 后查看您的错误消息“无法为对象堆保留足够的空间”,这似乎使用了一些内存。我猜想在调用library(xlsx) 之前调用.jinit(parameters=c("-Xrs", "-Xss1m")) 可以解决这个问题。
  • 我建议你使用 WriteXLS 包:{WriteXLS} 这个包对 Rstudio 更友好 imo。

标签: java r xlsx rstudio


【解决方案1】:

尝试从

中清除您的临时文件

控制面板 > 程序 > Java

看看它是否有效。

【讨论】:

    【解决方案2】:

    我最近在新机器上安装 R 时遇到了这个问题。确保您使用正确版本的 Java(32 位与 64 位)以匹配您的 R 版本。请注意,Java 的 64 位版本不在他们的主下载页面上,而是在他们的“手册”d /l 页here.

    【讨论】:

      【解决方案3】:

      我总是在顶部使用这些行:

      options(java.parameters="-Xmx4000m")
      options(java.home="C:/Program Files/Java/jre7/")
      

      看看是否有帮助。

      【讨论】:

        【解决方案4】:

        试试这些包:

        install.packages("XLConnect")
        install.packages("xlsxjars")
        install.packages("xlsx")
        

        然后加载library()

        使用read.xlsx2("blah.xlsx",sheetIndex=NULL)

        不要使用file.choose,直接将文件插入read.xlsx2函数

        read.xlsx2("blah.xlsx",sheetName=NULL")
        

        【讨论】:

        • 当您从包xlsx 调用read.xlsx2() 时,安装XLConnect 有什么好处?
        • XLConnect 是允许从 R 中读取、写入和操作 Microsoft Excel 文件的软件包。它只是读取 excel 文件的另一种方式。只是提供我关于以其他方式阅读 excel 文件的建议。但是对于 xlsx 你确实需要 xlsxjars 包
        • 两个软件包的目标相同:XLConnect提供全面的功能来读取、写入和格式化 Excel 数据。 xlsx提供 R 函数以读取/写入/格式化 Excel 2007 和 Excel 97/2000/XP/2003 文件格式。 但是,XLConnect depends on other packages XLConnectJars and rJava 也需要同时安装。
        • 我推荐openxlsx,它功能齐全,不依赖于java
        【解决方案5】:

        其中一个较新的软件包是 rio 软件包。它解决了我遇到的许多导入和导出问题,并且具有仅需要一个库来导入/导出许多不同格式的额外好处。它根据文件名的扩展名确定格式。即使它使用基本相同的功能,它似乎也比其他一些软件包运行得更干净、更快。例如,对于 Excel 文件,它使用 write.xlsx 函数,但对我来说适用于大型数据集,而 write.xlsx 没有。包文档可以在here找到。

        install.packages("rio")    
        library(rio)
        
        import("myfile.xlsx")
        export(df, "myfile.xlsx")
        

        【讨论】:

          【解决方案6】:

          我推荐 Hadley 的 readxl 包,它从 CRAN 安装,没有 Java 依赖项。

          library("readxl")
          my_data <- read_excel(filename, sheet = 1)
          

          【讨论】:

            猜你喜欢
            • 2021-05-23
            • 1970-01-01
            • 1970-01-01
            • 2021-11-21
            • 1970-01-01
            • 2016-08-28
            • 2020-10-23
            • 2020-06-24
            • 1970-01-01
            相关资源
            最近更新 更多