ほとんど使用されていない関数は、多くの問題 (このようなものrapply
)に対する完璧な解決策になるはずです。ただし、ユーザー作成関数は、ツリー内のどこにあるかを知ることができません。f
ネストされたリスト内の要素の名前を呼び出しで渡す方法はありf
ますrapply
か? 残念ながら、rapply
呼び出しは.Internal
かなり速くなります。
ネストされたリスト内の要素のインデックスを検索しますか? という質問を参照してください。、 あなたは書ける:
rappply <- function(x, f) {
setNames(lapply(seq_along(x), function(i) {
if (!is.list(x[[i]])) f(x[[i]], .name = names(x)[i])
else rappply(x[[i]], f)
}), names(x))
}
それから、
> mylist <- list(a = 1, b = list(A = 1, B = 2), c = list(C = 1, D = 3))
>
> rappply(mylist, function(x, ..., .name) {
+ switch(.name, "a" = 1, "C" = 5, x)
+ })
$a
[1] 1
$b
$b$A
[1] 1
$b$B
[1] 2
$c
$c$C
[1] 5
$c$D
[1] 3