Porównaj konwersję ciągu znaków z as.numeric
z tym, jak można wykonać z read.fwf
.Możliwa niespójność konwersji z tekstu na numeryczną
as.numeric("457") # 457
as.numeric("4 57") # NA with warning message
Teraz odczytać z pliku "fwf.txt" zawierającego dokładnie "5 7 12 4".
foo<-read.fwf('fwf.txt',widths=c(5,5),colClasses='numeric',header=FALSE)
V1 V2
1 57 124
foo<-read.fwf('fwf.txt',widths=c(5,5),colClasses='character',header=FALSE)
V1 V2
1 5 7 12 4
Teraz będę pamiętać, że w „numerycznej” wersji, read.fwf
robi konkatenacji w ten sam sposób Fortran robi. Byłem tylko trochę zaskoczony, że nie rzuca błędu lub NA
w taki sam sposób jak as.numeric
. Ktoś wie dlaczego?
'read.fwf' wywołuje' read.table', który jest funkcja, która zajmuje się 'colClasses'. Możesz uzyskać to samo zachowanie, używając 'read.table' zamiast' read.fwf'. Na przykład, jeśli zmienisz zawartość pliku na "5 7 | 12 4", a następnie odczytasz go za pomocą 'read.table (" fwf.txt ", header = FALSE, sep =" | ", colClasses =" numeric ") ', otrzymujesz ten sam wynik. Pomyślałem, że 'read.table' musi pozbyć się odstępów między cyframi, kiedy wie, że klasa ma być numeryczna, ale patrząc na kod funkcji, nie mogłem powiedzieć na pewno, czy to się dzieje. – eipi10