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

出力は345 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では次の値が順番に並んでいるので簡単ですが、ここでは次の値がわからないので問題があります。

4

2 に答える 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 に答える