我对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 ...
答案 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"))