我可以在" R"

时间:2016-10-28 13:26:25

标签: r loops if-statement

我目前正在研究猴子中的匹配到样本任务。我想评估选择某种刺激的频率,无论选择的正确性如何。

为此,我有一个数据帧df,包含6288行和6列(" Monkey"," Session"," Sample", "匹配","贴膜","成功"),其中只有最后三个现在很重要。

df$Matchdf$Foil中的数据是刺激的名称(字符串),df$Success是二进制的。 df$Matchdf$Foil由65个不同的刺激名称组成,我将其包含在向量Match.Foil中。

现在我想计算在所有6288次试验中点击图片(矢量Match.Foil的一部分)的频率。也就是说,每次名称都是df$Match&的一部分时。 df$Success == "1"df$Foil& df$Success == "0"

我尝试使用Match.Foil的每个部分点击次数构建一个向量,如下所示:

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)
      }

因此,正如您所看到的那样,如果语句为Pic.clicked + 1Pic.clicked + 0,我希望使用函数TRUEFALSE作为返回值。它不起作用并给我错误:

  

在Pic.clicked [i] = ifelse((df $ Match == Match.Foil [i]& ...:      要替换的项目数量不是替换长度的倍数

有人有想法,如何建立一个合适的柜台?我考虑使用switch,但我没有任何使用该功能的经验,似乎没有像我需要的那样工作。我也试过运行6288循环,但这会产生相同的警告。

1 个答案:

答案 0 :(得分:0)

你可以使用sum(),它在布尔矢量上使得TRUE计为1:

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        myToolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_48dp);
        myToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Log.e("navigation", "navigation");
            }
        });