2016-11-14 8 views
1

ある条件がアクティブになって次の反復にスキップすると、反復プロセスにNULL値を格納しないようにする方法がありますか?「どのように解決する」の意図は、この問題は、ループの構造そのものであるforループ内で反復をスキップするときにNULL値を格納しないようにする

[CONTEXT]:

あなたは内部の記憶メカニズムを使用する必要があるとき、私はケースを参照してください。条件文と連動してループし、基本的に可能性のあるパスの1つが興味のないシナリオが与えられます。計算を後で行うのではなく、その時点で治療を与えることを誇りにして、次の反復にスキップします。

[]のみリスト 2より大きい配列の保存された番号で私が興味を持って、数の特定の配列所与

仮定する。

storeGreaterThan2 <- function(x){ 
y <- list() 
    for (i in seq_along(x)) { 
     if (x[i] > 2) { 
      y[[i]] <- x[i] 
     } else { 
      next 
     } 
    } 
y 
} 

最終目的とした以前の機能の契約が、反復をスキップするための条件が活性化されたときのインデックスで不足している操作は、最終リストにNULL値で満たされています。それはそれに対処することができるか、ループの構造内部の問題に対処するの精神で

> storeGeaterThan2(1:5) 
[[1]] 
NULL 

[[2]] 
NULL 

[[3]] 
[1] 3 

[[4]] 
[1] 4 

[[5]] 
[1] 5 

+2

あなたのループ内でインデックス長を使用(y)+1とすると、次のような追加要素を追加することができます: 'y [[length(y)+1]] < - x [i]'。あなたの望む結果に応じて、forループを使うよりもいくつかのより良い、そしてより速い方法があります。 – Dave2e

+0

これは、同じループ内のNULL値の問題を引き起こす良い解決策です。 –

答えて

1

これはちょっと変わった例です。それがx-y problemかどうか疑問です。あなたの状況や最終的に何をしたいのかについてもっと言えばよいかもしれません。たとえば、関数の入力が常に昇順であるかどうかによって、これを実行しようとするさまざまな方法があります。 @ Dave2eのcommentは、あなたが実際に何をしているかに応じてより良い方法があると私の意見では、マーク上にあると思います。いずれにせよ、あなたがリストを返す前に、単にNULL要素を削除することができます。考えてみましょう。

storeGreaterThan2 <- function(x){ 
    y <- list() 
    for(i in seq_along(x)) { 
     if(x[i] > 2) { 
     y[[i]] <- x[i] 
     } else { 
     next 
     } 
    } 
    y <- y[-which(sapply(y, is.null))] 
    return(y) 
} 
storeGreaterThan2(1:5) 
# [[1]] 
# [1] 3 
# 
# [[2]] 
# [1] 4 
# 
# [[3]] 
# [1] 5 

ではなく、最後にそれをクリーンアップするよりも、これまでNULL要素を保存せずにこれを行うための可能な方法である:

storeGreaterThan2 <- function(x){ 
    y <- list() 
    l <- 1     # l is an index for the list 
    for(i in seq_along(x)){ # i is an index for the x vector 
    if(x[i] > 2) { 
     y[[l]] <- x[i] 
     l  <- l+1 
    } 
    } 
    return(y) 
} 
+0

これはxyの問題@gungではありません。私はより多くの文脈を与えるために私の答えを編集する。 –

+0

@CristóbalAlcázar、十分に公正。ループのその時点で要素をポップすると、あなたが探しているものになるでしょうか?リストの要素とxの要素を追跡するために別のカウンタを使用しても構いませんか? – gung

+0

あなたの答えは問題を解決します。 @ Dave2eのコメントとあわせて、length(y)+1を使用することで問題を解決し、同じループ構文でnull値を格納しないようにしています。 私はこれをより明示的に答えを編集しようとします。私は正式なプログラミングの背景を持っていませんが、問題の主な目的はループの構造そのものでこの問題をどう対処するかです。 –

関連する問題