5

ネストされたリストを作成するとき、R には、リストの要素に役立つ命名構造があると考えられます。リストのリストがあり、リストに含まれるすべてのベクトルの関数を適用したいと考えています。 lapplyこれを行いますが、リストの命名構造を取り除きます。lapply名前を削除せずに、ネストされたリストのすべてのベクトル要素を取得するにはどうすればよいですか? 代わりにインデックスを渡そうとしましたが、同じことをしているようです (ストリップ名)。

TEST <- list(n1=list(a="5", b="65"), n2=list(a="f", b= "f6"))
TEST
lapply(TEST, function(x) gsub("6", "foo", x))
lapply(seq_along(TEST), function(i) gsub("6", "foo", TEST[[i]]))

コンソール出力:

> TEST
$n1
$n1$a
[1] "5"

$n1$b
[1] "65"


$n2
$n2$a
[1] "f"

$n2$b
[1] "f6"


> lapply(TEST, function(x) gsub("6", "foo", x))
$n1
[1] "5"    "foo5"

$n2
[1] "f"    "ffoo"

望ましい結果:

$n1
$n1$a
[1] "5"

$n1$b
[1] "foo5"


$n2
$n2$a
[1] "f"

$n2$b
[1] "ffoo"
4

1 に答える 1

10

rapply*applyファミリーのバリアントが必要なようです

rapply(TEST, function(x){gsub("6", "foo", x)}, how = "list")

$n1
$n1$a
[1] "5"

$n1$b
[1] "foo5"


$n2
$n2$a
[1] "f"

$n2$b
[1] "ffoo"

匿名関数の記述を避けるために、このようにすることもできます

rapply(TEST, gsub, pattern = "6", replacement = "foo", how = "list")
于 2012-11-28T15:20:33.103 に答える