Confrontare la conversione di una stringa di caratteri con as.numeric
in modo che possa essere eseguito con read.fwf
.Incoerenza possibile nella conversione da testo a numerico
as.numeric("457") # 457
as.numeric("4 57") # NA with warning message
Ora da un file "fwf.txt" contenente esattamente "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
Ora, ti faccio notare che nella versione "numerico", read.fwf
fa concatenazione allo stesso modo Fortran fa. Ero solo un po 'sorpreso dal fatto che non generava un errore o NA
nello stesso modo di as.numeric
. Qualcuno sa perché?
'read.fwf' chiama' read.table', che è la funzione che si occupa di 'colClasses'. Puoi ottenere lo stesso comportamento usando 'read.table' invece di' read.fwf'. Ad esempio, se si modifica il contenuto del file in "5 7 | 12 4" e lo si legge con 'read.table (" fwf.txt ", header = FALSE, sep =" | ", colClasses =" numerico ") ', ottieni lo stesso risultato. Ho capito che read.table deve liberarsi degli spazi intermedi tra i caratteri numerici quando sa che la classe dovrebbe essere numerica, ma guardando il codice della funzione non potrei dire con certezza se è quello che sta succedendo. – eipi10