0

我只想为某些值迭代一个循环,所以我使用这个:

present <- c(3,5,7,8)
for(i in present)
{
   print(i)
}

这给了我

[1] 3
[1] 5
[1] 7
[1] 8

但是我需要跳转到循环中的下一个值,比如我不想在上面的示例中打印 5。

我不能使用下一个,因为我希望它像这样嵌套

present <- c(3,5,7,8)
for(i in present)
{
    k <- i
    "Jump to next value of present"
    while(k < "The next value for i should come here")
    {
        k <- k + 1
        print(k)
    }
}

输出将是 3 4 5 6 7 8 但条件必须检查 k 的值是否超过 i 的下一个值。

有没有办法做到这一点?

我将借助 C 进一步解释,

for(i=0; i < 10; i++)
{
   for(k=i;k <= i+1;k++)
   {
       printf("%d", k);
   }
}

该链接包含上述代码 http://codepad.org/relkenY3的输出

在 C 中这很容易,因为下一个值是按顺序排列的,但在这里下一个值是未知的,因此出现了问题。

4

2 回答 2

2

你应该做的是遍历两个向量:

x <- head(present, -1)
# [1] 3 5 7
y <- tail(present, -1)
# [1] 5 7 8

并且这样做的功能是mapply(看看?mapply)。您的伪代码的近似翻译是:

invisible(mapply(function(x, y) while(x < y) {x <- x + 1; print(x)}, x, y))

但也许你会发现这更有趣:

mapply(seq, x + 1, y)
于 2013-01-14T04:48:22.887 回答
0

我怀疑答案是使用seq_along并将其用作“当前”的索引,但正如其他人指出的那样,即使进行简单的修改,您的代码也不承诺提供您期望的内容。K <- K=1赋值跳得太远,无法在任何时候提供 3 的值,并且终止条件同样不清楚。它以您构造的形式变成无限循环。处理这个;

present <- c(3,5,7,8)
    for(i in seq_along(present))
    {
        k <- i
        while(k < length(present) )
        {
            k <- k + 1
            print(present[k])
        }
    }
于 2013-01-14T05:09:31.167 回答