2012-01-30 10 views
5

RODBC jest główną biblioteką w R do importowania danych z bazy danych do R. RODBC wydaje się mieć zdolność "odgadnięcia" typu danych kolumny, które uważam za szczególnie denerwujący.denerwujące "funkcja" (lub błędy?) Dla RODBC

Przesłałem plik test.xlshere lub można utworzyć plik xls siebie:

  1. utworzyć 2 kolumny, pierwsza kolumna o nazwie col_a a druga kolumna o nazwie col_b.
  2. typ co chcesz w col_a, Wpisałem litery na tej kolumnie dla 92 rzędów
  3. w 92th rzędu col_b wpisz numer tam wpisałem „1923” bez zmiany typu danych (czyli nie używając ')
  4. spróbuj zaimportować plik xls do R za pomocą następującego scenariusza:

library(RODBC) 

setwd("C:/Users/hke775/Documents/Enoch/MISC/R_problems/RODBC") 
channel <- odbcConnectExcel("test.xls",readOnly=TRUE) 
dummy.df <- sqlFetch(channel,"Sheet1") 
odbcClose(channel) 

Zobaczysz, że w dummy.df, jest NA, 1923 w tej kolumnie zniknął.

Jeśli chcesz ponownie zobaczyć 1923, możesz zmienić pierwszy wiersz numeru col_b na numer, który powraca ponownie.

To bardzo denerwujące, ponieważ nie chcę ręcznie modyfikować danych. Muszę użyć innego pakietu do importowania plików xls, ale nie mogę znaleźć innych pakietów równie gładkich jak RODBC (próbowałem gdata i xlsReadWrite).

Czy brakowało mi czegokolwiek w komendzie sqlFetch i powodowało problemy? Dzięki.

+0

Czy jesteś pewien, że wypróbowałeś gdata? Kiedy wypróbowałem twój plik testowy z pakietem gdata używając 'DF <- read.xls (" test.xls ")' działało. "1923" było obecne. –

+0

Gdata musi mieć perla, którego nie mogę zainstalować w moim biurze. – lokheart

+1

Jeśli moce, które mogą zainstalować R, powinny również zainstalować dystrybucję Rtools, ponieważ jest to wymagane do rozwoju R i ma w niej perl: http : //cran.r-project.org/bin/windows/Rtools/ –

Odpowiedz

8

proszę nie winię R lub RODBC dla Microsoft's bugs ...;)

Jednak z powodu błędu w sterowniku ODBC, określając wierszy Skanowanie (MAXSCANROWS) ustawienie aktualnie nie ma wpływu . Innymi słowy, sterownik ODBC Excel (MDAC 2.1 i nowsze) zawsze skanuje pierwsze 8 wierszy w określonym źródle danych, aby określić typ danych dla każdej kolumny o danej kolumnie: .

Aby uzyskać dodatkowe informacje na temat Wiersze aby skanować błąd, w tym proste obejście, kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu w bazie wiedzy Microsoft Knowledge Base:

189897 XL97: Dane obcinane do 255 znaków ze Sterownik ODBC programu Excel

Próbowałem naprawić w KB189897, ustawiając wartość TypeGuessRows na 0 i zobacz, co się stanie!

> library(RODBC) 
> channel <- odbcConnectExcel("test.xls",readOnly=TRUE) 
> tail(dummy.df <- sqlFetch(channel,"Sheet1")) 
    col_a col_b 
87  c NA 
88  d NA 
89  e NA 
90  f NA 
91  g NA 
92  h 1923 
> odbcClose(channel) 

Proszę, nie ma up-głosów lub czeków ... po prostu wyślij gotówkę.:)

+1

+1 za brak głosów wstępnych lub znaczników ..! – agstudy

+0

Świetnie. Ale czy powinniśmy dojść do wniosku, że użytkownik bez uprawnień administratora nie ma rozwiązania? –

+0

lepiej ustawić TypeGuessRows do 24 lub dowolne ustawienie wystarczająco głębokie. Ale 0 wykona nieograniczone skanowanie i wpłynie na wydajność. (Czytam tysiące niestrukturalnych plików .xls/.xlsx) – Langeleppel

Powiązane problemy