2017-10-25 8 views
1

を組み合わせて、次のリストを考えてみましょう:は、リスト内の他のすべてのベクトルを収集し、1つのベクターに

rows <- structure(list(`1` = 1:40, `2` = 41:79, `3` = 80:118, `4` = 119:157, 
      `5` = 158:196, `6` = 197:235, `7` = 236:274, `8` = 275:313, 
      `9` = 314:352, `10` = 353:392), 
     .Names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")) 

私は現在、私は2つの変数を生成したいと思いれる(i in (1:10)でインデックス付け)ループを書くことに取り組んでいます。

最初の数字はrows[[i]]です。例えば、i <- 1

> rows[[i]] 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 
[40] 40 

は私がrows内の他のすべての値で構成されて第二のベクターを生成するにはどうすればよいとき(すなわち、ときi <- 1、これは41:392を吐き出すだろうか)?私の考えは、私はそれがあることを期待するようrow_list[[setdiff(1:length(rows), i)]]、そして実際、

> setdiff(1:length(rows), i) 
[1] 2 3 4 5 6 7 8 9 10 

を使用していたが、

> rows[[setdiff(1:length(rows), i)]] 
Error in rows[[setdiff(1:length(rows), i)]] : 
    recursive indexing failed at level 2 

私はリスト構造が本当に不器用なようだけど、私はリストを保持したいと思いますリストとして。

答えて

2

あなたは残りのリスト要素からすべての要素の差集合を抽出するために

myFunc <- function(i) setdiff(unlist(rows), rows[[i]]) 

を使用することができます。コードが失敗する理由は、rows[[<vector>]]は1レベルの深さのリストに再帰的インデックスを実装しようとするためです。この形式の索引付けは、深くネストされたリストでは非常に便利ですが、ここでは必要ありません。

どのように動作するかを確認するには、リスト要素1と2から最初の要素を含む長さ1のベクトルをそれぞれ抽出するためにrows[[c(1, 2)]]rows[[c(2, 1)]]を試してください。ヘルプファイル?"["の「再帰的(リストのような)オブジェクト」セクションには、追加の詳細が記載されています。

関連する問題