Data.table: dec=',' рд╣реЛрдиреЗ рдкрд░ рдлрд╝реНрд░реЗрдб рдорд╛рдиреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Rdatatable/data.table

> fread('a,b,c,d\n1e1,1e2,1e3,"4,0001"\n1,2,3,4\n', dec=',')
       a     b     c      d
   <num> <num> <num>  <num>
1:    10   100  1000 4.0001
Warning message:
In fread("a,b,c,d\n1e1,1e2,1e3,\"4,0001\"\n1,2,3,4\n", dec = ",") :
  Discarded single-line footer: <<1,2,3,4>>

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлреНрд▓реЛрдЯ рдкрд╛рд░реНрд╕рд░ рд▓рд╛рд▓рдЪ рд╕реЗ рдПрдХ рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ 1,2 рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ "рд╡рд┐рд╡рд░рдг" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ (рдЬреЛ рдкреБрд░рд╛рдиреА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд▓рдВрдмреА рд╣реИ):

'рдлрд╝реНрд░реЗрдб' рд╕рд╛рдВрдЦреНрдпрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП C рдлрд╝рдВрдХреНрд╢рди 'strtod' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
'1.23' рдпрд╛ '1,23'ред 'strtod' рджрд╢рдорд▓рд╡ рд╡рд┐рднрд╛рдЬрдХ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ ('ред' or
',' рдЖрдорддреМрд░ рдкрд░) рдЖрд░ рд╕рддреНрд░ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдмрдЬрд╛рдп an . рдХреЗ рд░реВрдк рдореЗрдВ
рддрд░реНрдХ 'strtod' рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдХреЗ рд▓рд┐рдП
'рдлрд╝реНрд░реЗрдб (..., dec = ",")' рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 'рдлрд╝реНрд░реЗрдб' рдЗрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ (рдФрд░ рдХреЗрд╡рд▓ рдпрд╣)
R рд╕рддреНрд░ рдХрд╛ рд▓реЛрдХреЗрд▓ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
рд╡рд╛рдВрдЫрд┐рдд рджрд╢рдорд▓рд╡ рд╡рд┐рднрд╛рдЬрдХред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдкреИрдХреЗрдЬ! рдзрдиреНрдпрд╡рд╛рджред
рд╕рдВрдпреЛрдЧ рд╕реЗ, рдореИрдВрдиреЗ рдХрд▓ рдлрд╝реНрд░реЗрдб рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ред
рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ (рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдкрд░ lapply fread рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓реЗ рд╕реЗ рдкреНрд░рд╛рдкреНрдд)ред

library(data.table)

DT = data.table(A = rep("20,1", 1e4))
fwrite(DT, "DT.csv", quote = FALSE)

classA = character(1e3)

for (i in seq_along(classA)) {

  DT = fread("DT.csv", sep = ";", dec = ",", colClasses = "numeric")
  classA[i] = DT[, class(A)]
}

table(classA)

рдпрд╣ рдореБрдЭреЗ рджреЗрддрд╛ рд╣реИ:

Warning message:
In fread("DT.csv", sep = ";", dec = ",", colClasses = "numeric",  :
  Bumped column 1 to type character on data row 387, field contains '20,1'. Coercing previously read values in this column from logical, integer or numeric back to character which may not be lossless; e.g., if '00' and '000' occurred before they will now be just '0', and there may be inconsistencies with treatment of ',,' and ',NA,' too (if they occurred in this column before the bump). If this matters please rerun and set 'colClasses' to 'character' for this column. Please note that column type detection uses a sample of 1,000 rows (100 rows at 10 points) so hopefully this message should be very rare. If reporting to datatable-help, please rerun and include the output from verbose=TRUE.

table(classA)
# classA
# character   numeric 
#        1       999 
which(classA == "character")
# [1] 9
`````

So, sometimes, the column is read as character with the spotted row index being different for different runs. And the ```which``` indicates it is more likely to happen in the first iterations. I don't get the randomness and the fact that colClasses is ignored (I set colClasses after reading fread doc...).
And... I did not manage to reproduce the error when setting verbose = TRUE... Also, the bug was observed using RStudio, not reproduced in the R console...
Sorry if I missed or misunderstood something...

```r
sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.10.4-3

loaded via a namespace (and not attached):
[1] tools_3.3.2 yaml_2.1.18

рдХреГрдкрдпрд╛ data.table рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдкрд┐рдЫрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рд╕реЗ fread рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рд╣реБрдП рд╣реИрдВ

рджрд░рдЕрд╕рд▓ ... 1.10.5 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рджреЛ рдмрд╛рд░ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jameslamb picture jameslamb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

franknarf1 picture franknarf1  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

st-pasha picture st-pasha  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rafapereirabr picture rafapereirabr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

andschar picture andschar  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ