【问题标题】:Iterating through vector: replacement has length zero遍历向量:替换的长度为零
【发布时间】:2012-07-27 19:05:24
【问题描述】:

我正在尝试遍历一个向量并编辑一个新向量,但是我不断收到错误替换的长度为零。发生错误的部分在这里:

NewPos1 = rep(NROW(sig_decision))
for( i in 2:length(NewPos)) {
 NewPos1[i] = ifelse( NewPos[i] == 0 & NewPos[i-1] == 1 & ind1[i] > 0 , 1, 
      ifelse(NewPos[i] ==0 & NewPos[i-1] == -1 & ind1[i] < 0  , -1,0))
}

可以说的更具体一些

我哪里错了?

编辑:我应该更具体地说 ind1 是一个数字向量。我想要一个循环的原因是,如果 NewPos(NewPos[1]) 的前一个元素是 1 并且 ind1[2] > 0,那么从 NewPos1([NewPos[1]) 中的第二个元素开始,那么我想要 NewPos1[ 2] 为 1,以此类推遍历整个向量,因此如果 ind1[3] >0,则 NewPos1[3] 也为 1

【问题讨论】:

  • 我不知道这些变量是什么。
  • sig_decision 是什么?什么是 NewPos ,因为您只定义了 NewPos1 。同时,检查switch 而不是嵌套几十个if else 元素。
  • 参见tinyurl.com/reproducible-000关于可重复性...

标签: r vector zoo


【解决方案1】:

问题很可能出在ind1 上(因为你还没有告诉我们那是什么)。我猜想(如果ind1 真的是一个与NewPos 长度相同的数字向量),这是解决您问题的更有效方法:

v <- NewPos[-1]  ## elements 2:n
ind2 <- ind1[-1] ## elements 2:n
vlag1 <- NewPos[-length(NewPos)] ## elements 1:(n-1)
NewPos1 <- ifelse(v==0 & vlag1==1 & ind2>0, 1,
               ifelse(v==0 & vlag==-1 & ind2<0, -1, 0))

正如@CarlWitthoft 指出的那样,switch 有时会很有用,但我认为两个嵌套的ifelse 语句并不过分。

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多