1

更新 下記参照

インデックスを作成するカウンター/イテレーターがない場合、while ループでリストまたはベクターに要素を設定する方法がわかりません。以下の最小限の例を参照してください。以下の foo のように、数値を含まない論理ステートメントを含むより複雑な while ループがあるため、リスト vec に x を入力する方法がわかりません。while ループ内にある種のイテレータを作成して、while ループを通過するたびにイテレータが単純に 1 ずつ増えるようにすることは可能ですか? 次に、このイテレータを使用してリスト vec にインデックスを付けることができますか?

foo <- function(){
  names <- list("a","b","c")
  vec <- list()
  more <- TRUE
  while(more == TRUE){
   names <- rep(names, 2)
   if(length(names) < 50) vec <- names
   more <- length(names) < 50
   }
  vec
}

foo()

ありがとう、これは私が今望んでいたように動作するようです:

foo <- function(){
  names <- list("a","b","c")
  i <- 0
  vec <- list()
  more <- TRUE
  while(more == TRUE){
    i <- i + 1
    names <- rep(names, 2)
    if(length(names) < 50) vec[[i]] <- names
    more <- length(names) < 50
  }
 vec
}

foo()
4

1 に答える 1

1

独自のイテレータを構築するアプローチを使用するのは非常に簡単です。これは、このタスクを実行するためのRに最も似ていない可能性のある方法で、1から10までの数字を出力するサンプルコードです。

i <- 0
more <- TRUE
while(more == TRUE){
    i <- i + 1
    print(i)
    if(i == 10){
        more <- FALSE
    }
}

ご覧のとおり、これはあなたが説明したものとほとんど同じです。ループの先頭でイテレータを増やすだけです。

于 2012-06-24T17:39:07.560 に答える