2016-08-16 7 views
1

これは、oneのリストからリストを作成したいので、そこにネストされたリストとその関数にアクセスできるようにしたいのですあまりにも。ループ内のリスト内のすべてのリストにアクセスする方法

私はその中の2のリストを持っている3のリストを持っている:

my_list 

    structure(list(a = structure(list(a = structure(list(value = c(1L, 
4L), class = structure(c(1L, 1L), .Label = c("a", "b", "c"), class = "factor")), .Names = c("value", 
"class"), row.names = c(1L, 4L), class = "data.frame"), b = structure(list(
    value = c(2, 1), class = structure(c(2L, 2L), .Label = c("a", 
    "b", "c"), class = "factor")), .Names = c("value", "class" 
), row.names = c(2L, 5L), class = "data.frame")), .Names = c("a", 
"b")), b = structure(list(a = structure(list(value = c(6, 1), 
    class = structure(c(1L, 1L), .Label = c("a", "b", "c", "d" 
    ), class = "factor")), .Names = c("value", "class"), row.names = c(1L, 
5L), class = "data.frame"), b = structure(list(value = c(5, 1 
), class = structure(c(2L, 2L), .Label = c("a", "b", "c", "d" 
), class = "factor")), .Names = c("value", "class"), row.names = c(2L, 
6L), class = "data.frame")), .Names = c("a", "b")), c = structure(list(
    a = structure(list(value = 5:6, class = structure(c(1L, 1L 
    ), .Label = c("a", "b", "c", "d", "e"), class = "factor")), .Names = c("value", 
    "class"), row.names = 5:6, class = "data.frame"), b = structure(list(
     value = c(4, 1), class = structure(c(2L, 2L), .Label = c("a", 
     "b", "c", "d", "e"), class = "factor")), .Names = c("value", 
    "class"), row.names = c(4L, 7L), class = "data.frame")), .Names = c("a", 
"b"))), .Names = c("a", "b", "c")) 

    $a 
    $a$a 
     value class 
     1  a 
     4  a 

    $a$b 
     value class 
     2  b 
     1  b 


    $b 
    $b$a 
     value class 
     6  a 
     1  a 

    $b$b 
     value class 
     5  b 
     1  b 


    $c 
    $c$a 
     value class 
     5  a 
     6  a 

    $c$b 
     value class 
     4  b 
     1  b 

私はネストされた各リストsubsetにしたいループvalue != 1によって結果のリストは次のようになります。

以下のコードで
my_list 
$a 
     $a$a 
      value class 
      4  a 

     $a$b 
      value class 
      2  b 



     $b 
     $b$a 
      value class 
      6  a 


     $b$b 
      value class 
      5  b 



     $c 
     $c$a 
      value class 
      5  a 
      6  a 

     $c$b 
      value class 
      4  b 

、私はlist [[1]][[1]]list[[2]][[2]]list[[3]][[3]]にのみアクセスすることができます。ループで他のユーザーにアクセスしてsubset関数を適用するにはどうすればよいですか?

for (i in 1:length(my_list)) { 
    my_list[[i]][[i]] <- subset(my_list[[i]][[i]],my_list[[i]][[i]]$value=1) 
} 
+0

このトピックについて昨日質問した質問にリンクしていないことに気付きました。両者が異なる場合は、http://stackoverflow.com/questions/38954154/using-a-loop-or-vectorisation-to-subset-a-list-by-multiple-elements-in-a-vecto –

+0

良いアイデア、それを編集しました – Bonono

+1

良い点 - 今すぐ固定 – Bonono

答えて

1

我々はlapplyネストされたか、この質問のために、ネストされたループを行う方法を知りたいという方のためrapply

lapply(my_list, function(x) lapply(x, function(y) subset(y, value!=1))) 
#$a 
#$a$a 
# value class 
#4  4  a 

#$a$b 
# value class 
#2  2  b 


#$b 
#$b$a 
# value class 
#1  6  a 

#$b$b 
# value class 
#2  5  b 


#$c 
#$c$a 
# value class 
#5  5  a 
#6  6  a 

#$c$b 
# value class 
#4  4  b 
+0

私は本当にlapplyを使用する方法を学ぶ必要があります。ループでそれを行うことはできませんか? – Bonono

+0

@Bononoネストされたループがあります。ネストされたループをルーピングするか、単一のデータセットに変換し、 '値'をフィルターに掛けて再びネストされたフォームに戻します(これは不必要に複雑です)。 – akrun

+1

私は同意する、それはあなたがそれを置くとばかげて聞こえる。あなたの助けをありがとう、akrun、あなたはいつものように驚いています。私は博士号であなたを認めます! – Bonono

1

とを使用することができます - 私はこれを理解するのに役立ちました:

for (i in 1:length(my_list)) { 
    for (j in 1:2) { 
    my_list[[i]][[j]] <- subset(my_list[[i]][[j]],my_list[[i]][[j]]$value!=1) 
    } 
} 
+1

'サブセット'の中には、 'value!= 1'つまり' my_list [[i]] [[j]] < - サブセット(my_list [[i]] [[j]]、value!= 1 ) ' – akrun

関連する問題