2016-07-29 6 views
0

Listを作成し、毎回for loopを実行するように変更したいと考えています。実際には、新しいlistの長さは、既存のListの長さによって異なります。forループの長さを変更したリストを作成

コードで
for (i in 1:length(df1$x)) { 
    for (j in 1:length(df2$y[[i]])) { 

    if (df1$x[i] == df2$y[[i]][j]) { 

    } 

    } 
} 

df2$yは私のリストであると私の二for loop長さは私のdf2$yリストの長さに基づいています。以下は、私の大のコードのごく一部です。基本的には、df2$yの要素にアクセスしていて、df1$xと比較しています。だから、If conditionが満たされたら、そのリスト要素を新しく作成されたリストに保存したいと思います。リストの長さは大きいです。したがって、多くのリスト要素が条件を満たす予定です。したがって、for loopに新しいリストを作成する必要があります。

+2

問題を完全に記述した場合、ネストされたコントロールフローを含まないもっと洗練されたソリューションで誰かを助けることができると感じています。 –

+0

私のコードはちょっと複雑ですし、私はそれの中に別のループがあります。私は直面している問題に適切な答えを得るために私の質問を単純なものにしていました。私はforループで新しいリストを作成する際に問題に直面しています。ネスト化されたコントロールフローについては、 'foreach'を使用することで簡素化できることは分かりません。 – Santosh

+0

出力リストの現在の長さのカウンタnを保持し、位置n + 1のリストに要素を追加するだけです –

答えて

0

ご意見ありがとうございます。だから、私は自分で問題を解決しましたが、私は自明でした。私の答えでは、新しいリストnewListを最初に作成しました。これは計算時間を短縮するためにメモリの事前割り振りとして重要であることがわかりました。次に、if conditionが満たされたときに、newListに新しい要素を保存しました。[[]][]を使用しました。

newList <- vector("list", N) 
for (i in 1:length(df1$x)) { 
    for (j in 1:length(df2$y[[i]])) { 

    if (df1$x[i] == df2$y[[i]][j]) { 

     newList[[i]][j] <- df2$z[j] 

    } 

    } 
} 

注:以下は、私のためによく働い私のアプローチである私は私の問題が解決されることをお知らせしたいと思いので、私は自分で私の質問に答えました。私は本当にあなたの意見をお待ちしております。

0

私は少し混乱していますが、df1$xにあるdf2$yのすべての要素の新しいリストを作成しようとしていると思います。その場合、ベクトル化されたコードを利用することができます:

df1 <- list(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
df2 <- list(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 5, 5, 7, 8, 10, 22, 23, 4, 5, 3, 10) 

#Create a list with 15 elements 
df3 <- y[y %in% x] 
+0

私の 'df1 $ x'はリストではありません。もともと 'if'の中でやっていることは、文字列の比較だけではなくあいまいなマッチングです。 – Santosh

+0

@ user3669801あなたはあいまいなマッチングであるという事実と、その質問の仕方についてのいくつかの詳細を載せることができますか? – MKG

+0

@ user3669801 'df1 $ x'で一致する要素の数の長さや' df2 $ y'で一致する要素の数を探している最終出力もありますか? – MKG

関連する問題