for if / elseif循环在R中不起作用

时间:2016-06-01 03:44:48

标签: r if-statement for-loop

我想计算以下逻辑的总和。每当数字从0切换到-1或1时,以及当数字在1和-1之间切换时,基本上将一个加到numTrade。将连续元素视为0,使(0,1,1,1)计为1,(1,0,-1,1)计为2。

numTrade应该总共返回4,但它返回3.有人可以解释原因吗?

{{1}}

2 个答案:

答案 0 :(得分:1)

这是一个"矢量化"相当于你应该做的事情:

numUnits <- c(0, 1, 0, -1, 1, 1, -1)

absDiff <- abs(diff(numUnits))
numTrade <- sum((head(numUnits, -1) == 0 & absDiff == 1) | absDiff == 2)
print(numTrade)

结果是4。

修改

在R中,

for循环非常慢。在这种情况下,矢量版本的速度提高了约50倍(使用microbenchmark包测量)。

答案 1 :(得分:0)

请检查以下代码,

numTrade<-0

numUnits<-c(0,1,0,-1,1,1,-1)

for(i in 2:length(numUnits)){
  print( sprintf("numUnits[I-1]: numUnits[I]: %d -> %d ", numUnits[i-1],  numUnits[i]))

  if((numUnits[i-1]<0 & numUnits[i]>0) | numUnits[i-1]>0 & numUnits[i]<0  ){
    print( "Match for between 1 to -1")
    numTrade<-numTrade+1
  }
 else if( numUnits[i-1]==0 & numUnits[i]!=0 ){
    print( "Match for 0 to 1/-1")
    numTrade<-numTrade+1
  } 
  else {
    numTrade<-numTrade+0
  }
} 
print( numTrade)

这里我们需要检查2个条件,一个在1到-1之间,另一个在0到1 / -1之间。