2016-10-28 7 views
0

私は現在、サルのマッチング - サンプルタスクを研究しています。私は、選択の正確さにかかわらず、特定の刺激が選ばれた頻度を評価したいと思います。"R"のifelseで関数をリターン引数として使うことはできますか

これを行うには、データフレームdfと6288行6列( "Monkey"、 "Session"、 "Sample"、 "Match"、 "Foil"、 "Success")があります。 3つは今重要です。

df$Matchおよびdf$Foilのデータは、刺激(文字列)の名前であり、df$Successはバイナリです。 df$Matchおよびdf$Foilは、6535個の異なる刺激名で構成されています。これは、ベクトルMatch.Foilに含まれています。

今、私はどのくらいの頻度で画像(ベクトルMatch.Foilの一部)がクリックされたかを数えたいと思います。つまり、毎回df$Match & df$Success == "1"またはdf$Foil & df$Success == "0"のいずれかの名前になります。あなたは、私がもし戻っとして機能Pic.clicked + 1Pic.clicked + 0を使用していた見るように、

Pic.clicked= vector(mode="numeric", length= length(Match.Foil)) 

for (i in 1:length(Match.Foil)){ 
    Pic.clicked[i] = ifelse(
      df$Match == Match.Foil[i] & df$Success == "1")| 
       (df$Foil== Match.Foil[i] & df$Success == "0"), 
      Pic.clicked[i] +1, 
      Pic.clicked[i] +0) 
     } 

ので:

は、私はこのような Match.Foilの各部分のためにクリックされた回数と、ベクターを構築しようとしましたステートメントは TRUEまたは FALSEです。それは動作しないし、私にエラーを与える:

In Pic.clicked[i] = ifelse((df$Match == Match.Foil[i] & ... : number of items to replace is not a multiple of replacement length

誰もが、どのように適切なカウンタを構築するアイデアを持っていますか?私はswitchを使用することを考えましたが、私はその機能に関する経験はなく、必要なように動作していないようです。私も6288ループのためにそれを実行しようとしましたが、それは同じ警告を生成します。

+0

を。短い再現可能な例が非常に役立つだろう。また、関数を返そうとしているとはどういう意味なのかは明確ではありません。 'Pic.clicked [i] + 1'は関数ではなく、数値です。 – Aaron

答えて

0
あなたは、ブールベクトルにTRUE数1のようになります合計()、使用することができ

:私たちは少しより多くの情報が必要

for (i in 1:length(Match.Foil)) { 
    Pic.clicked[i]= sum((Stage4.pics$Match == Match.Foil[i] & Stage4.pics$Success == "1")| 
         (Stage4.pics$Foil== Match.Foil[i] & Stage4.pics$Success == "0")) 
} 
+0

あなたのご意見ありがとうございます!私はまだ忙しかったので、まだ答えに来なかった。私は解決策を見つけました。問題はこのループ内の構文ではありませんでしたが、これはこのループの周りに必要な2番目のループでした。誰かが興味があれば、コードを投稿することができます。再度、感謝します! –

関連する問題