在R中使用带有for循环的if和else语句

时间:2014-03-06 20:59:55

标签: r if-statement for-loop

我不确定我是否完全理解如何在for循环中使用if和else语句。我的代码如下所示:

> X
[1] 1 0 1 1 1
A=0
for (i in 1:5){
if (X[i]=1)
A=A+1
}
else{
A=A
}

例如在这种情况下,向量X中有4'1。因此,对于向量中的每1,我希望它将A加1到A的值。(所以A应该等于4)。

4 个答案:

答案 0 :(得分:1)

正如其他人提到的那样:=用于分配(类似于<-;有关详情,请参阅here),==用于比较相等。

你最后的循环应该是:

for(i in X){
  if (i == 1) A <- A + 1
}

您不需要else子句,因为它实际上没有做任何事情,只是稍微减慢了循环。

R是矢量化的,所以使用这个事实。说:

更为惯用
sum(X)

如果您想全部计算它们,或者查看applylapply以了解更复杂的情况,具体取决于您正在执行的操作的上下文。

答案 1 :(得分:0)

X <- c(1, 0, 1, 1, 1)
A <- 0

for (i in X){
   if (i == 1)
    A <- A + 1
   else A <- A + 0
}

答案 2 :(得分:0)

这就是你所追求的:

for (i in 1:5){
  if (X[i]==1){
    A=A+1
  }else{
    A=A  
  }
}

请注意,=中的双X[i]==1符号会为您提供可伪造的布尔语句(X[i]等于1),与单=个符号相比较将X[i]设为1

的示例

答案 3 :(得分:0)

比较符号应为(X[i]==1),并且您使用if语句的方式很好。但你得到了额外的括号,这会弄乱你的代码。

它看起来应该是这样的

X <- c(1,0,1,1,1)
A=0
for (i in 1:5){
    if (X[i]==1)
        A=A+1
    else
        A=A
}

或者像这样

X <- c(1,0,1,1,1)
A=0
for (i in 1:5){
    if (X[i]==1){
        A=A+1
    }
    else{
        A=A
    }
}

如果在if语句中只有一条指令,则不需要大括号,但如果在特定条件下运行更多两条或更多条指令,则必须使用大括号。

缩进仅用于帮助可视化。