Prevención de inferencia de clase de columna en fread ()
¿Hay alguna manera defread
para imitar el comportamiento deread.table
por el cual elclass
de la variable se establece por los datos que se leen.
Tengo datos numéricos con algunos comentarios debajo de los datos principales. Cuando usofread
para leer en los datos, las columnas se convierten en caracteres. Sin embargo, al configurar elnrow
en read.table` puedo detener este comportamiento. ¿Es esto posible en fread? (Preferiría no alterar los datos sin procesar ni hacer una copia enmendada). Gracias
Un ejemplo
d <- data.frame(x=c(1:100, NA, NA, "fff"), y=c(1:100, NA,NA,NA))
write.csv(d, "test.csv", row.names=F)
in_d <- read.csv("test.csv", nrow=100, header=T)
in_dt <- data.table::fread("test.csv", nrow=100)
Que produce
> str(in_d)
'data.frame': 100 obs. of 2 variables:
$ x: int 1 2 3 4 5 6 7 8 9 10 ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
> str(in_dt)
Classes ‘data.table’ and 'data.frame': 100 obs. of 2 variables:
$ x: chr "1" "2" "3" "4" ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
- attr(*, ".internal.selfref")=<externalptr>
Como solución alternativa, pensé que podría usarread.table
para leer en una línea, obtener la clase y establecer elcolClasses
, pero estoy malentendido.
cl <- read.csv("test.csv", nrow=1, header=T)
cols <- unname(sapply(cl, class))
in_dt <- data.table::fread("test.csv", nrow=100, colClasses=cols)
str(in_dt)
Uso de Windows8.1 R versión 3.1.2 (2014-10-31) Plataforma: x86_64-w64-mingw32 / x64 (64 bits)