31

組み込みのマトリックスの「人口」の平均を計算したいstate.x77。コードは次のとおりです。

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

原子ベクトルとは

4

1 に答える 1

39

ジョランのコメントを拡張するには、次のことを考慮してください。

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

したがって、あなたのデータは、列も行も持たないPopulationのような他のベクトルと何ら変わりはありません。これは、高度な構造や次元を持たない単なる一連の数字です。例えば1:10apply

> 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 には、論理、整数、実数、複素数、文字列 (または文字)、生の 6 つの基本的な (「アトミック」) ベクトル型があります。 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...
于 2013-05-22T02:54:49.200 に答える