3

以下は、失敗した呼び出し、エラー メッセージ、および問題の長さを示すいくつかの表示です。

it <- tapply(molten, c(molten$Activity, molten$Subject, molten$variable), mean)
# Error in tapply(molten, c(molten$Activity, molten$Subject, molten$variable),  : 
#  arguments must have same length

length(molten$Activity)
# [1] 679734

length(molten$Subject)
# [1] 679734

length(molten$variable)
# [1] 679734

dim(molten)
# [1] 679734      4

str(molten)
# 'data.frame': 679734 obs. of  4 variables:
#  $ Activity: Factor w/ 6 levels "WALKING","WALKING_UPSTAIRS",..: 5 5 5 5 5 5 5 5 5 5 ...
#  $ Subject : Factor w/ 30 levels "1","2","3","4",..: 2 2 2 2 2 2 2 2 2 2 ...
#  $ variable: Factor w/ 66 levels "tBodyAcc-mean()-X",..: 1 1 1 1 1 1 1 1 1 1 ...
#  $ value   : num  0.257 0.286 0.275 0.27 0.275 ...
4

3 に答える 3

7

見てみると、「原子オブジェクト、通常はベクトル」で?tapplyあることがわかります。アトミック オブジェクトではないデータ フレーム ("molten") をXフィードします。tapplyis.atomicて、試してみてくださいis.atomic(molten)。さらに、グループ化変数はlist(INDEX引数を参照) として提供する必要があります。

このようなものは動作します:

tapply(X = warpbreaks$breaks,  INDEX = list(warpbreaks$wool, warpbreaks$tension), mean)
#          L        M        H
# A 44.55556 24.00000 24.55556
# B 28.22222 28.77778 18.77778 
于 2014-04-25T20:47:41.200 に答える
1

INDEX には単一のオブジェクトが必要ですがc( )、エラーの原因となるそれらをすべて一緒に文字列化するため、リストを使用します。

it <- tapply(molten$value, list(Act=molten$Activity, sub=molten$Subject, var=molten$variable), mean)

より良いでしょう:

it <- with(molten , tapply(value, list(Act=Activity, Sub=Subject, var=variable), mean) )
于 2014-04-25T20:47:21.247 に答える