XLConnect中的错误

12

我正在尝试将一个Excel表格导入到R中。我使用了以下代码:

x <- loadWorkbook("x.xlsx")
b <- readWorksheet(x, sheet="b")
第一行代码可以正常运行,但是运行第二行代码会出现以下错误:
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for functionreadWorksheetfor signature ‘"jobjRef", "character"’

那张表里没有缺失值。

为了重现结果,请从https://github.com/ahmedfsalhin/1stpaper下载trial.xlsx文件。

系统信息:Yosemite操作系统。


发布一个导致此问题的示例工作簿链接将非常有帮助。话虽如此,Yosemite是全新的;您可能需要重新安装Java和/或等待Rjava的新CRAN构建版本。 - Carl Witthoft
@CarlWitthoft 我刚刚更新了问题,并提供了一个链接到Excel文件以便复现。 - mallet
@CarlWitthoft 我已经升级到Java开发工具包8(JDK 8),重新安装了XLConnect后,现在它可以正常工作了。 - mallet
抱歉,这不是Java的问题。是xlsx包引起了混淆。 - mallet
4个回答

17

看起来“根本原因”是您应该添加代码来指定函数所属的包。在这种情况下,输入XLConnect::loadWorkbook选择要使用的功能。在 R 中不存在“混淆”或重复函数名称的随机选择。选择取决于所有已加载包的加载顺序。使用search()查看输入命令的软件包检查顺序。

例如,当前我得到:

search()
 [1] ".GlobalEnv"            "package:caTools"      
 [3] "package:XLConnect"     "package:XLConnectJars"
 [5] "package:stats"         "package:graphics"     
 [7] "package:datasets"      "package:vecsets"      
 [9] "package:cgwtools"      "package:grDevices"    
[11] "package:utils"         "package:methods"      
[13] "Autoloads"             "package:base"

你会注意到环境中的任何内容(.GlobalEnv)被首先选择,而所有已加载的库都会覆盖base包,例如。

你会发现,环境中的任何东西(.GlobalEnv)都是首选,而所有已加载的库都会覆盖base包,例如。


7

在经过一番努力后,我找到了解决此问题的方法。在R工作室中,转到包并删除所有与XLConnect和xlsx相关的包。然后仅安装XLConnect包,方法是键入:

install.packages("XLConnect", dependencies=TRUE)

这样之后,问题就不应该存在了。


在我尝试使用writeWorksheet将数字写入单元格并收到相同错误的情况下,这对我有效。 - Nikitin Nikolay

5

在测试三个不同的用于将 .xlsx 文件加载到 R 中的软件包(XLConnectxlsxgdata)时,我遇到了相同的问题。解决方法是为 loadWorkbook 指定命名空间:

d3_wb = XLConnect::loadWorkbook("Megadataset_v3.xlsx")
d3 = readWorksheet(d3_wb, 1)

无论是否加载/安装xlsx,它都可以工作。错误是因为在xlsx中也有一个同名函数,并且它默认使用错误的函数,这取决于加载软件包的顺序。


-1

尝试使用以下代码: x <- XLConnect 包中的 readWorksheetFromFile("x.xlsx")。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接