2017-11-14 20 views
2

ネストされたリストがあります。特定の名前を持つすべてのノード/要素を削除する必要があります。たとえば、以下の定義済みのR list()では、名前が 'lol'のすべてのノードを削除したいと考えています。私はそれが階層の異なるレベルで現れることに注意します。特定の名前を持つリスト要素を削除する

ツリーをスキャンしてそれらのノードを削除する最も良い方法は何ですか?

tree <- list(
    A = list(
     A_1 = list(
      A_1_1 = list(), A_1_2 = list() 
     ), 
     lol = "haha" 
    ), 
    B = list(
     B_1 = list(
      B_1_1 = list(), B_1_2 = list(), lol = "rofl" 
     ) 
    ) 
) 

私はその結果になるように、ツリーオブジェクトに何らかのアクションを実行したいと思います:

$A 
$A$A_1 
$A$A_1$A_1_1 
list() 

$A$A_1$A_1_2 
list() 



$B 
$B$B_1 
$B$B_1$B_1_1 
list() 

$B$B_1$B_1_2 
list() 
+1

ありがとう、今修正する必要があります。 – dcl

+0

投稿を更新したようです。深くネストされた他のネストされたケースのような他のパターンがありますか? – akrun

答えて

2

あなたはそれらの要素を削除するには、単純な再帰関数の関数を作成することができます

foo <- function(x) { 
    x <- x[names(x) != "lol"] 
    if(is.list(x)) lapply(x, foo) 
} 

foo(tree) 
# $A 
# $A$A_1 
# $A$A_1$A_1_1 
# list() 
# 
# $A$A_1$A_1_2 
# list() 
# 
# 
# 
# $B 
# $B$B_1 
# $B$B_1$B_1_1 
# list() 
# 
# $B$B_1$B_1_2 
# list() 
+0

ありがとうございます。再帰関数は決して私の強い訴えではありません。 – dcl

関連する問題