2014-04-09 83 views
1

我有一個小問題,R 3.1.0的條形圖功能。 (它在舊版本中工作正常)。R 3.1.0中的barplot失敗。 read.csv轉換什麼應該是數字因素

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

你能提供樣本數據嗎?這會重新產生問題。 – Harpal

+0

這是一個簡單的csv文件。我已更新我的帖子。 – Thargor

+0

你可以請'dput(head(nd_p_a))'輸出嗎? –

回答

1

這是一個解決方法。新行爲很煩人

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

似乎有與type.convert()新版本(3.1.0)的問題,它被read.table()調用,在R中被read.csv()調用。type.convert()的最新版本假定文件中的表示比R的更精確內部數字存儲格式(雙精度浮點值),因此將其轉換爲FACTOR。這種行爲對於一羣人來說似乎非常令人驚訝,所以我敢打賭它會消失,或者會有一個參數可以通過鏈傳遞給type.convert()。對於那些依賴於自動現場類型檢測算法的老舊行爲的人(包括我自己)來說,這似乎非常痛苦。

這個問題應該在上游的某個地方交叉鏈接,例如「爲什麼read.csv()不再可靠地使用浮點值?」

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

+0

這是超級討厭。 https://bugs.r-project.org/bugzilla/show_bug.cgi?id=15751我寫它作爲一個錯誤,他們說這是意圖行爲 –

+0

謝謝你的解釋。非常有幫助! – Thargor