2014 年 10 月更新:现在在 v1.9.5 中
fread
现在接受dec=','
(以及其他非“.”小数点分隔符),#917 https://github.com/Rdatatable/data.table/issues/917。添加了一个新段落?fread
。如果您所在的国家/地区使用dec=','
那么它应该可以工作。如果没有,您将需要阅读该段落以执行额外步骤。万一它坏了dec='.'
,可以通过以下命令关闭此新功能options(datatable.fread.dec.experiment=FALSE)
.
之前的回答...
马特·道尔(Matt Dowle)找到了一个很好的语言环境解决方法。
首先我的sessionInfo
sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=C
...
尝试以下操作可以找出罪魁祸首:
Sys.localeconv()["decimal_point"]
decimal_point
"."
尝试设置 LC_NUMERIC 在 Ubuntu(Matthew) 和 WinXP(me) 上有效
Sys.setlocale("LC_NUMERIC", "French_France.1252")
[1] "French_France.1252"
Message d'avis :
In Sys.setlocale("LC_NUMERIC", "French_France.1252") :
changer 'LC_NUMERIC' peut résulter en un fonctionnement étrange de R
行为很好,变化如下:
DT = fread("A,B\n3,14;123\n4,22;456\n",sep=";")
str(DT)
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
$ V1: num 3.14 4.22
$ V2: int 123 456
这 ”。”小数分隔符现在作为字符串加载(正如它应该的那样),这与之前相反。
DT = fread("A,B\n3.14;123\n4.22;456\n",sep=";")
str(DT)
Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
$ V1: chr "3.14" "4.22"
$ V2: int 123 456