Consider the following tmp.csv:
writeLines("q01
-0.207623873704532
-1.4852856113776
-2432100838991580000
-2.33192914235436
-44.8581139833089", tmp <- tempfile())
There's a big number in it. We'll get a character column from this csv:
library(data.table)
dt <- fread(tmp)
dt
q01
<char>
1: -0.207623873704532
2: -1.4852856113776
3: -2432100838991580000
4: -2.33192914235436
5: -44.8581139833089
Coerce the column into numeric:
dt[, q01 := as.numeric(q01)]
dt
q01
<num>
1: -2.076239e-01
2: -1.485286e+00
3: -2.432101e+18
4: -2.331929e+00
5: -4.485811e+01
Then fwrite it to another csv and re-fread it:
fwrite(dt, tmp2 <- tempfile())
dt2 <- fread(tmp2)
dt2
We still get character column.
q01
<char>
1: -0.207623873704532
2: -1.4852856113776
3: -2432100838991580000
4: -2.33192914235436
5: -44.8581139833089
I'm not sure if it is intended behavior. It makes sense if we want to preserve all information but such behavior could be surprising if user assumes that numbers written by fwrite() could be read into numbers by fread(). In this example, it is not the case. Even if we specify colClasses = "numeric", it won't work either:
> dt2 <- fread(tmp2, colClasses = "numeric")
Warning message:
In fread(tmp2, colClasses = "numeric") :
Attempt to override column 1 <<q01>> of inherent type 'string' down to 'float64' ignored. Only overrides to a higher type are currently supported. If this was intended, please coerce to the lower type afterwards.
> dt2
q01
<char>
1: -0.207623873704532
2: -1.4852856113776
3: -2432100838991580000
4: -2.33192914235436
5: -44.8581139833089
Consider the following
tmp.csv:There's a big number in it. We'll get a character column from this csv:
Coerce the column into numeric:
Then
fwriteit to another csv and re-freadit:We still get
charactercolumn.I'm not sure if it is intended behavior. It makes sense if we want to preserve all information but such behavior could be surprising if user assumes that numbers written by
fwrite()could be read into numbers byfread(). In this example, it is not the case. Even if we specifycolClasses = "numeric", it won't work either: