0

使用 和 的组合forwhile我的问题类似于此示例:我想将 1 加到向量 x 的第一个元素,跳过元素 2:4 并将 1 加到第五个元素,直到向量 x 的末尾。

j <- 0
x <- c(rep(1, 4), 5:7)

for (i in 1:length(x)){
  x[i] <- x[i] + 1 
  while (j == 0){
    i <- i + 1
    if(x[i] != 1) j <- 1
    print(paste('in:', i))
  }
print(paste('out:', i))
}

结果表明 i 值没有变化。是否可以在R中更改它?

[1] "in: 2"
[1] "in: 3"
[1] "in: 4"
[1] "in: 5"
[1] "out: 5"  # look!!!
[1] "out: 2"
[1] "out: 3"
[1] "out: 4"
[1] "out: 5"
[1] "out: 6"
[1] "out: 7"
4

3 回答 3

1

为什么不简单

x + rep(c(1,0,0,0), length.out=length(x))

?

如果您不介意回收警告,请使用:x + c(1,0,0,0).

于 2013-08-27T00:51:31.567 回答
1

通过@baptiste 评论,我解决了这个问题。正如帮助信息所述:“next停止当前迭代的处理并推进循环索引”。给出示例的一种解决方案:

j <- 0
x <- c(rep(1, 4), 5:7)

for (i in 1:length(x)){
  if (x[i] == 1 & j == 0){
    x[i] <- x[i] + 1 
    j <- 1
    next
  } 
  if (x[i] == 1) next
  x[i] <- x[i] + 1 
}

x

[1] 2 1 1 1 6 7 8
于 2013-08-27T21:05:24.567 回答
0

或者没有警告

x <- c(rep(1, 4), 5:7)
increment.position <- seq(1, length(x), by = 5)
x[increment.position] <- x[increment.position] + 1
于 2013-08-27T09:15:45.020 回答