为什么R读取数字数据作为字符?

use*_*469 8 r

我正在尝试加载包含整数和浮点数据的文件.我不知道为什么R会将其中一列读作字符字段.

 > df <- read.table( 'C:\\temp\\test.tab' , 
 +                   sep = '\t' , header = TRUE , stringsAsFactors = FALSE , dec="." )
 > str(df)
 'data.frame':  7 obs. of  5 variables:
  $ A: int  0 0 0 0 1 0 0
  $ B: int  1431 2097 2712 24821 27359 41165 49221
  $ C: int  0 0 0 0 0 0 0
  $ D: chr  "7" "26.950000762939453" "57.95000076293945" "21" ...
  $ E: int  1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)

文件内容:

 A  B   C   D   E
 0  1431    0   7   1
 0  2097    0   26.950000762939453  2
 0  2712    0   57.95000076293945   3
 0  24821   0   21  4
 1  27359   0   57.900001525878906  5
 0  41165   0   33.95000076293945   6
 0  49221   0   28.950000762939453  7
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

 > R.version
           _                           
 platform       x86_64-w64-mingw32          
 arch           x86_64                      
 os             mingw32                     
 system         x86_64, mingw32             
 status                                     
 major          3                           
 minor          1.0                         
 year           2014                        
 month          04                          
 day            10                          
 svn rev        65387                       
 language       R                           
 version.string R version 3.1.0 (2014-04-10)
 nickname       Spring Dance 
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 11

这可能值得我们指出的真正答案,所以......

type.convert在R 3.1.0中改变了行为(并且,如下所述,将在很大程度上恢复到其在R 3.1.1中的3.1.0之前的行为):

从R 3.1.0开始,将输入转换为数字或复数将导致精度损失,它们将作为字符串(as.is = TRUE)或因子返回.

这在r-devel邮件列表上引起了相当重要的骚动.相关(和长)线程的开头就在这里.

正如上面提到的那样,该讨论的结果之一是在后续版本的开发版本中恢复了默认行为.

在短期内,如果您知道哪些列会受到影响,您可以随时使用colClasses.否则你必须修改你的代码来检查read.table你自己的结果和转换,我想.