1

mydf27 人の被験者からのデータを含むdata.frame があります。congruent(2 レベル) と(5 レベル) の 2つの予測子がoffsetあるため、全体で 10 の条件があります。27 人の各被験者が各条件で 20 回テストされ、合計 10*27*20 = 5400 の観測値が得られました。RTは応答変数です。構造は次のようになります。

> str(mydf)
'data.frame':   5400 obs. of  4 variables:
 $ subject  : Factor w/ 27 levels "1","2","3","5",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ congruent: logi  TRUE FALSE FALSE TRUE FALSE TRUE ...
 $ offset   : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 5 5 1 2 5 5 2 2 3 5 ...
 $ RT       : int  330 343 457 436 302 311 595 330 338 374 ...

私は、10 の条件のそれぞれで各被験者daply()の RT を計算するために使用しました。mean

myarray <- daply(mydf, .(subject, congruent, offset), summarize, mean = mean(RT))

結果は、私が望んでいた通りに見えます。つまり、3D 配列です。いわば 5 つの表 (条件ごとに 1 つ) で、条件に対するoffset各被験者の平均を示します。congruent=FALSEcongruent=TRUE

ただし、 の構造を確認するとmyarray、紛らわしい出力が得られます。

List of 270
 $ : num 417
 $ : num 393
 $ : num 364
 $ : num 399
 $ : num 374
 ... 
 # and so on
 ...
 [list output truncated]
 - attr(*, "dim")= int [1:3] 27 2 5
 - attr(*, "dimnames")=List of 3
  ..$ subject  : chr [1:27] "1" "2" "3" "5" ...
  ..$ congruent: chr [1:2] "FALSE" "TRUE"
  ..$ offset   : chr [1:5] "1" "2" "3" "4" ...

これは、非常によく似た形式 (3 次元、数値のみ) ですがozone、パッケージのプロトタイプ配列の構造とはまったく異なって見えます。plyr

を使用して、この配列に関するさらに要約した情報を計算したいと思いaaplyます。正確には、各被験者とオフセットの合同平均と不一致平均の差を計算したいと思います。

aaply() ただし、すでにlike の最も基本的なアプリケーションはaaply(myarray,2,mean) 意味のない出力を返します。

FALSE  TRUE 
   NA    NA 
Warning messages:
1: In mean.default(piece, ...) :
  argument is not numeric or logical: returning NA
2: In mean.default(piece, ...) :
  argument is not numeric or logical: returning NA

daply()関数がそのような奇妙に構造化された出力を返す理由がわかりませんaaplyplyr率直に言って、パッケージの経験がほとんどないことを認めます。

4

1 に答える 1

1

あなたのデータが含まれていないので、確かなことはわかりませんが、私はあなたの からダミー セットを作成しようとしましたstr()。を 2 回使用することで、やりたいことを実行できます (推測しています) ddply。まず平均、次に平均の差。

#Make dummy data
mydf <- data.frame(subject = rep(1:5, each = 150), 
  congruent = rep(c(TRUE, FALSE), each = 75), 
  offset = rep(1:5, each = 15), RT = sample(300:500, 750, replace = T))

#Make means
mydf.mean <- ddply(mydf, .(subject, congruent, offset), summarise, mean.RT = mean(RT))

#Calculate difference between congruent and incongruent
mydf.diff <- ddply(mydf.mean, .(subject, offset), summarise, diff.mean = diff(mean.RT))
head(mydf.diff)
#   subject offset  diff.mean
# 1       1      1  39.133333
# 2       1      2   9.200000
# 3       1      3  20.933333
# 4       1      4  -1.533333
# 5       1      5 -34.266667
# 6       2      1  -2.800000
于 2013-06-17T23:59:47.133 に答える