循环通过R中的选定值

uttx8gqw  于 2023-05-26  发布在  其他
关注(0)|答案(2)|浏览(107)

我想只对一些值进行迭代,所以我使用了这个:

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,但是条件必须检查k的值是否超过i的下一个值。
有办法做到这一点吗?
我将借助C来进一步解释,

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

该链接包含上述代码http://codepad.org/relkenY3的输出
这在C中很容易,因为下一个值是按顺序的,但是这里的下一个值是未知的,因此问题就来了。

3pvhb19x

3pvhb19x1#

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

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)
ejk8hzay

ejk8hzay2#

我认为答案是使用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])
        }
    }

相关问题