循环遍历R中的选定值

时间:2013-01-14 04:03:21

标签: r loops next

我想仅针对某些值迭代一个循环,所以我使用它:

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

给了我

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

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

我不能使用next,因为我希望它嵌套在这样的

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但如果条件超过i的下一个值,则必须检查k的值。

无论如何要做到这一点?

我会帮助C进一步解释,

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

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

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我怀疑答案是使用seq_along并将其用作“present”的索引,但正如其他人指出的那样,即使进行了这么简单的修改,您的代码也无法提供您期望的内容。 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])
        }
    }