2013-05-22 557 views
23

我想計算內置矩陣state.x77的「總體」的平均值。代碼是:r錯誤dim(X)必須具有正的長度嗎?

apply(state.x77[,"Population"],2,FUN=mean) 

#Error in apply(state.x77[, "Population"], 2, FUN = mean) : 

# dim(X) must have a positive length 

我該如何防止這個錯誤?如果我使用$符號

apply(state.x77$Population,2,mean) 
# Error in state.x77$Population : $ operator is invalid for atomic vectors 

什麼是原子矢量?

+3

但無論如何,如果你只是幹這一行一列,爲什麼不'平均(state.x77 [, 「人口」])'? – joran

+0

@joran非常感謝。參考常見問題和均值(state.x77 [,「人口」])都是有益的。 – time

回答

29

要擴大joran的意見,認爲:

> is.vector(state.x77[,"Population"]) 
[1] TRUE 
> is.matrix(state.x77[,"Population"]) 
[1] FALSE 

所以,你Population數據現在已經沒有任何其他向量diferent,像1:10,這既沒有列或行apply反對。這只是一系列沒有更高級結構或維度的數字。例如。

> apply(1:10,2,mean) 
Error in apply(1:10, 2, mean) : dim(X) must have a positive length 

這意味着你可以直接使用mean功能針對其已選擇的矩陣的子集:例如:

> mean(1:10) 
[1] 5.5 
> mean(state.x77[,"Population"]) 
[1] 4246.42 

爲了解釋「原子」載體詳情,請參閱將R FAQ再次(這有點複雜,所以請堅持你的帽子)...

R有六個基本('原子')向量類型:邏輯,整數,實數, 複雜,字符串(或字符)和原始。 http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Vector-objects

在這種情況下這樣的原子是指載體爲R對象的基本構建塊(如原子彌補在現實世界中的一切)。

如果通過輸入?"$"作爲命令讀取R的在線幫助,你會發現它說:

「$」只適用於遞歸對象,僅在下面的部分遞歸討論 對象。

由於載體(如1:10)是基本的構建模塊(「原子」),沒有遞歸子元素,試圖用$來訪問它們的部分將無法正常工作。

因爲你的矩陣(statex.77)本質上只是一些方面載體,如:

> str(matrix(1:10,nrow=2)) 
int [1:2, 1:5] 1 2 3 4 5 6 7 8 9 10 

...你也不能使用$訪問子部分。

> state.x77$Population 
Error in state.x77$Population : $ operator is invalid for atomic vectors 

但可以訪問子部分使用[和名稱,像這樣:

> state.x77[,"Population"] 
    Alabama   Alaska  Arizona... 
     3615   365   2212... 
+0

這是如何工作在類似的數據例如 '> is.vector(state.center $ x)的 [1] TRUE > is.matrix(state.center $ x)的 [1] FALSE > state.center $ X [1] -86.7509 -127.2500 -111.6250 -92.2992 -119.7730 ....... – Ankit

相關問題