2014-10-27 15 views
9

我想將一張excel表導入r。我用下面的代碼:XLConnect錯誤

x <- loadWorkbook("x.xlsx") 
b <- readWorksheet(x, sheet="b") 

第一線工作正常,但是,運行第二提供了以下錯誤:

Error in (function (classes, fdef, mtable) : 
    unable to find an inherited method for function ‘readWorksheet’ for signature ‘"jobjRef", "character"’ 

我在這片沒有缺失值。

爲了複製,請從https://github.com/ahmedfsalhin/1stpaper下載trial.xlsx

系統信息:優勝美地操作系統。

+0

將鏈接發佈到導致此問題的示例工作簿會非常有幫助。也就是說,優勝美地是全新的;您可能需要重新安裝Java和/或等待新的CRAN版本「Rjava」。 – 2014-10-27 14:07:45

+0

@CarlWitthoft我剛剛更新了一個鏈接到Excel文件重現的問題。 – athraa 2014-10-27 16:42:38

+0

@CarlWitthoft我沒有更新到Java開發工具包8(JDK 8),再次安裝XLConnect後,它現在可以正常工作。 – athraa 2014-10-27 17:37:58

回答

12

看起來「根本原因」是你應該添加代碼來指定它所屬的函數和包。在此情況下,輸入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套餐爲例。

6

經過很多努力找到了解決方案。在R studio中轉到軟件包並刪除所有與XLConnect和xlsx相關的軟件包。然後通過鍵入只安裝XLConnect包

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

在此之後,問題應該不存在。

5

我而載入文件的.xlsx成R(XLConnectXLSXGDATA)測試了三種不同的包有同樣的問題。解決的辦法是指定命名空間loadWorkbook

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

然後,它的工作原理,如果XLSX加載/安裝或不能不管。錯誤是因爲在xlsx中也有一個名稱相同的函數,並且使用錯誤的函數是錯誤的,這取決於程序包加載的順序。