循环不会在R

时间:2015-10-06 12:41:19

标签: r

我有一个我想要执行的循环,这取决于代码中前一个循环的输出。这是代码;

holder <- list()
if (i < historyLength) movement <- movementType(relAngle, angleThreshold)

else if (i > historyLength-1) {
  # Array to store speeds
  speedHistory <- array(historyLength)
  n = historyLength-1
  # get the speeds from the previous n (hisoryLength) "Movements" 
  for (j in seq(1, length(historyLength))){
    speedHistory [n] = R[i-j, 6]
    n-1
  }

  if (!bayesFilter(speedHistory, minSpeed, GPS_accy)) movement <- "non-moving" 
  else if(bayesFilter(speedHistory, minSpeed, GPS_accy)) movement <- movementType(relAngle, angleThreshold)

}


holder [[i]] <- (movement)
for (t in seq(1, length(holder))){
  if (t == t-1) 
    changes <- 0 
  else if (t != t-1) 
    changes <- 1
}

您无法看到循环的开头,但会产生一列称为“移动”的数据。

我试图暂时将'动作'存储在对象'持有者'中。我想要的是底部for循环通过'holder'并在另一列中将标签更改为0或1。基本上如果下一个'运动'不等于前一个记录,则变为0等等。我认为问题在于对象'持有者'或许?

目前我正在进行循环,但它只打印出一列'1'。

任何帮助非常感谢!谢谢。

目前获得以下输出:

Movement        Changes
left               1 
right              1
forward            1 
non-moving         1
non-moving         1

认为问题出在存储动作的列表中?对不起,如果我知道问题在哪里,我会更具体。真的很新!

我最终得到一个数据框,其中列标题为“距离”,“速度”,“标题”,“运动”和“更改”。它循环正常,但由于某种原因,如上所述,更改结果为1列。下面有明显的错误吗?:

holder[[i]] <- (movement)
 for (t in seq(1, length(holder))){
  if (t == t-1) 
    changes <- 0 
  else if (t != t-1) 
    changes <- 1

我也尝试了这个,但它根本没有循环。

holder[[i]] <- (movement)
 for (t in seq(1, length(holder))){
  if (holder[t] == holder[t-1]) 
    changes <- 0 
  else if (holder[t] != holder[t-1]) 
    changes <- 1

我目前收到此错误:持有人[[t - 1]]出错:尝试选择少于一个元素

代码如下:

holder <- list(movement)
 for (t in length(holder)){
  if (holder[[t]] == holder[[t-1]]) 
    changes <- 0
  else changes <- 1

1 个答案:

答案 0 :(得分:2)

这对于评论来说太长了,所以我把它作为答案(实际上它可能会回答你的问题):

正如我在上一个问题的评论中已经提到过的那样,你应该看一下seq(1, length(holder))是什么,以及当你放if (t == t-1)时你正在做什么:你正在做类似&#的事情34;如果1 == 0&#34;这不可能是真的。

您需要使用&#34;第二个版本&#34;您的循环(或实际上没有循环...),它比较正确的事情,但holderlist,所以您需要将其定义为矢量或使用双括号(holder[[t]])。

if之后你不需要另外else(你实际上是什么&#34;说&#34;对于R是&#34;如果A是真的然后做一些事情,否则,如果A&#39;相反,那么做其他事情&#34;但是,必要时,如果A不是真,那么&#39;对面A&#39;是...... 如下所示:

for (t in seq(length(holder))){
  if (holder[[t]] == holder[[t-1]]) changes <- 0 else  changes <- 1
}

请考虑花一些时间回答上一个问题的答案,以了解您的解决方案无法解决的原因以及提供答案的原因。 (这包括阅读不同功能的文档,并查看变量可以采用的值,例如运行循环,一次&#34;一次转动#34;