R 3.1.0中的条形图失败。 read.csv将什么应该是数字转换为因素

时间:2014-04-09 12:43:20

标签: r

我对R 3.1.0的条形图功能有点问题。 (它在旧版本中运行良好)。

nd_p_a<- read.csv("nd_p_a.csv")
barplot(nd_p_a$y, col="blue", names.arg=nd_p_a$x, xlab="k", ylab="P(k)")

没有任何警告或错误。但是版本3.1.0我收到了一个错误:

Error in barplot.default(nd_p_a$y, col = "blue", names.arg = nd_p_a2$x,  : 
  'height' must be a vector or a matrix

那么,为什么这个在这个版本中不起作用?我怎样才能将因子转换为向量?我试过as.numeric()等等,但没有得到正确的结果。

CSV文件包含以下数据:

"x","y"
1.0,48.947791826110596
2.0,6.317211620667564
3.0,14.982593438237588
4.0,3.4443873302013475
5.0,9.760934831763135
6.0,1.7191829918211519
7.0,3.9200958456693455
8.0,1.0765813450714172
9.0,2.290369697396343
10.0,0.6342337460169456
11.0,1.1210994624619959
12.0,0.5291701034830391

希望获得更多信息:

sessionInfo()

3.0.3

R version 3.0.3 (2014-03-06)
Platform: x86_64-unknown-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

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

3.1.0

R version 3.1.0 beta (2014-03-28 r65330)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

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

loaded via a namespace (and not attached):
[1] tools_3.1.0

STR(nd_p_a)

3.0.3

'data.frame':   1449 obs. of  2 variables:
 $ x: num  1 2 3 4 5 6 7 8 9 10 ...
 $ y: num  48.95 6.32 14.98 3.44 9.76 ...

3.1.0

'data.frame':   1449 obs. of  2 variables:
 $ x: num  1 2 3 4 5 6 7 8 9 10 ...
 $ y: Factor w/ 221 levels "0.0010183159621912567",..: 194 201 171 184 220 173 187 167 178 166 ...

2 个答案:

答案 0 :(得分:3)

type.convert()的新版本(3.1.0)似乎存在问题,由read.table()调用,由read.csv()在R中调用。最新版本的type.convert()假定文件中的表示比R的内部数字存储格式(双精度浮点值)更准确,因此将其强制转换为 FACTOR 。这种行为对于一群人来说非常令人惊讶,所以我敢打赌它会消失,或者会有一个参数可以通过链传递给type.convert()。对于依赖于自动场类型检测算法的原有行为的人(包括我自己)而言似乎足够痛苦。

这个问题应该在上游某处交叉链接到“为什么read.csv()不能再使用浮点值可靠地工作了?”

http://r.789695.n4.nabble.com/type-convert-and-doubles-td4688616.html

答案 1 :(得分:1)

这是一个解决方法。新的行为令人讨厌

read.csv("nd_p_a.csv", colClasses=c("numeric", "numeric"))