1. ホーム
  2. r

[解決済み】r Error dim(X) must have a positive length?

2022-02-12 17:36:28

質問

組み込み行列の母集団の平均を計算したい。 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

アトミックベクターとは?

どのように解決するのですか?

joranのコメントを展開するために、考えてみましょう。

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

では、あなたの Population のような他のベクトルと何ら変わりはありません。 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には6つの基本的な(「アトミック」)ベクトル型があります:logical, integer, real, 複素数、文字列(または文字)、そしてローです。 http://cran.r-project.org/doc/manuals/r-release/R-lang.html#Vector-objects

この場合のatomicは、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...