使用for
和while
的组合,我的问题与此示例类似:我想在向量x的第一个元素中添加1,跳过元素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"
答案 0 :(得分:1)
为什么不简单
x + rep(c(1,0,0,0), length.out=length(x))
如果您不介意回收警告,请使用:x + c(1,0,0,0)
。
答案 1 :(得分: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
答案 2 :(得分:0)
或没有警告
x <- c(rep(1, 4), 5:7)
increment.position <- seq(1, length(x), by = 5)
x[increment.position] <- x[increment.position] + 1