Data.table: fread pode falhar ao analisar o arquivo válido quando dec = ','

Criado em 13 abr. 2018  ·  3Comentários  ·  Fonte: 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>>

Isso acontece porque o analisador float consome 1,2 avidamente como um único token, ao passo que, sem aspas, ele deve ser analisado como 2 campos separados.

Além disso, a seção "Detalhes" na documentação contém as seguintes informações (que há muito estão desatualizadas):

'fread' usa a função C 'strtod' para ler dados numéricos; por exemplo,
'1,23' ou '1,23'. 'strtod' recupera o separador decimal ('.' ou
',' geralmente) a partir do local da sessão R, em vez de como um
argumento passado para a função 'strtod'. Então para
'fread (..., dec = ",")' para funcionar, 'fread' muda isso (e apenas isso)
Localidade da sessão R temporariamente para uma localidade que fornece o
separador decimal desejado.

bug fread

Todos 3 comentários

Pacote incrível! Obrigada.
Coincidentemente, eu experimentei um comportamento estranho possivelmente relacionado com fread ontem.
Aqui está um exemplo simples (derivado de um caso real usando lapply fread em um monte de arquivos).

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)

Isso me dá:

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

certifique-se de atualizar para a versão de desenvolvimento de data.table e teste novamente. houve muitas melhorias em fread desde o último lançamento

Na verdade ... Executei o mesmo exemplo algumas vezes com 1.10.5 e funcionou bem.
Obrigada.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jangorecki picture jangorecki  ·  3Comentários

tcederquist picture tcederquist  ·  3Comentários

nachti picture nachti  ·  3Comentários

rafapereirabr picture rafapereirabr  ·  3Comentários

symbalex picture symbalex  ·  3Comentários