2014-10-27 7 views
9

Próbuję zaimportować arkusz excel do r. Użyłem poniższy kod:Błąd w XLConnect

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

Pierwsza linia działa dobrze, jednak uruchomiony drugi daje następujący błąd:

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

nie mam brakujących wartości w tym arkuszu.

Aby odtworzyć, pobierz trial.xlsx z https://github.com/ahmedfsalhin/1stpaper.

informacje o systemie: system operacyjny Yosemite.

+0

Byłoby bardzo pomocne opublikowanie linku do przykładowego skoroszytu, który to powoduje. Powiedział, że Yosemite jest zupełnie nowy; może być konieczne ponowne zainstalowanie Java i/lub oczekiwanie na nowe kompilacje CRAN 'Rjava'. –

+0

@CarlWitthoft Właśnie zaktualizowałem pytanie z linkiem do pliku Excela, aby go odtworzyć. – athraa

+0

@CarlWitthoft Zrobiłem aktualizację do Java Development Kit 8 (JDK 8) i po ponownym zainstalowaniu XLConnect, to działa dobrze teraz. – athraa

Odpowiedz

12

Wygląda na to, że "główną przyczyną" jest dodanie kodu, który określa zarówno funkcję, jak i pakiet, do którego należy. Wpisz XLConnect::loadWorkbook, aby wybrać ten, który chcesz w tym przypadku. Nie ma "pomieszania" lub losowego wyboru zduplikowanych nazw funkcji w R. Wybór zależy od kolejności ładowania wszystkich załadowanych pakietów. Użyj search(), aby zobaczyć kolejność, w której pakiety są sprawdzane pod kątem wprowadzonego polecenia.

przykład w chwili obecnej mam

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" 

Zauważysz, że coś w swoim środowisku (.GlobalEnv) wybiera pierwsze, i że wszystkie załadowane biblioteki zastąpić pakiet base, na przykład.

6

Po wielu zmaganiach znalazłem rozwiązanie tego problemu. W R studio przejdź do pakietów i usuń wszystkie pakiety związane z XLConnect i xlsx. Następnie zainstaluj tylko pakiety XLConnect, wpisując:

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

Po tym problem nie powinien istnieć.

5

miałem ten sam problem podczas testowania trzy różne pakiety do ładowania .xlsx pliki do R (XLConnect, XLSX, gdata). Rozwiązaniem było określenie nazw dla loadWorkbook:

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

Wtedy to działa, bez względu na to, czy xlsx załadowanego/zainstalowany lub nie. Błąd polega na tym, że istnieje również funkcja o tej samej nazwie w xlsx i domyślnie używa się niewłaściwej, która zależy od kolejności załadowania pakietów.