9

行が多すぎて空間コレログラムを実行できないデータフレームがあります。代わりに、種ごとに40行を取得し、そのサブセットでコレログラムを実行します。

データフレームをサブセット化する関数を次のように記述しました。

    samp <- function(dataf)
{
    dataf[sample(1:dim(dataf)[1], size=40, replace=FALSE),]
}

ここで、この関数をより大きなデータフレームの各種に適用したいと思います。

私が何かをしようとすると

culled_data = ddply (larger_data, .(species), subset, samp)

このエラーが発生します:

Error in subset.data.frame(piece, ...) : 
  'subset' must evaluate to logical

誰かがこれを行う方法についてのアイデアを持っていますか?

4

2 に答える 2

6

, subset通話から削除すると、機能するはずです。

于 2010-05-27T17:03:19.270 に答える
6

暗い答えはもちろん正しいですが、追加の説明を追加するために、私は自分自身を投稿します。

通話が機能しないのはなぜですか?

まず、構文は省略形です。それは同等です

ddply(larger_data, .(species), function(dfrm) subset(dfrm, samp))

そのため、 の 2 番目の引数としてfunction( を参照) を指定したことがはっきりとわかります。を使用することもできますが、あまりにも機能せず、リターンが発生し、論理ベクトルが必要になります。したがって、論理インデックスを返すときに使用できます。class(samp)subsetsamp(dfrm)sampdata.framesubsetsamp(dfrm)

この場合、サブセットを使用するにはどうすればよいですか?

subsetに論理ベクトルを与えて仕事をする:

ddply (larger_data, .(species), subset, sample(seq_along(species)<=40))

私は40で論理ベクトルを作成しTRUE(ところで、一部のスピースが40ケース未満の場合に機能し、その後すべてを返します)、それをランダムにします。

于 2010-05-29T22:00:05.063 に答える