假設我有一個嵌套串列,如下所示
test <- list(
a = data.frame(x = 1),
b = "foo",
c = list(
d = 1:5,
e = data.frame(y = 1),
f = "a",
list(g = "hello")
)
)
test
#> $a
#> x
#> 1 1
#>
#> $b
#> [1] "foo"
#>
#> $c
#> $c$d
#> [1] 1 2 3 4 5
#>
#> $c$e
#> y
#> 1 1
#>
#> $c$f
#> [1] "a"
#>
#> $c[[4]]
#> $c[[4]]$g
#> [1] "hello"
我想知道這個嵌套串列中字符元素的位置。TRUE在這種情況下,如果元素是字符,我想回傳一個命名向量或命名串列,FALSE否則回傳。
我可以用rapply, 取消列出所有內容:
rapply(test, is.character)
#> a.x b c.d c.e.y c.f c.g
#> FALSE TRUE FALSE FALSE TRUE TRUE
但是,我不能這樣做來查找所有資料幀,因為rapply()還會取消列出資料幀(請注意,第一個元素是a.x而不僅僅是a)。
rapply(test, is.data.frame)
#> a.x b c.d c.e.y c.f c.g
#> FALSE FALSE FALSE FALSE FALSE FALSE
因此,有沒有辦法找到嵌套串列的哪些元素是資料框?請注意,該解決方案應該適用于嵌套串列中的任意數量的級別。
我正在尋找僅在基礎 R 中的解決方案。
uj5u.com熱心網友回復:
1)應用
library(rrapply)
rrapply(test, f = is.data.frame,
classes = c("character", "integer", "data.frame"), how = "unlist")
## a b c.d c.e c.f c.g
## TRUE FALSE FALSE TRUE FALSE FALSE
2) 遞回
findDF <- function(x) {
if (is.data.frame(x)) TRUE
else if (is.list(x)) lapply(x, findDF)
else FALSE
}
unlist(findDF(test))
## a b c.d c.e c.f c.g
## TRUE FALSE FALSE TRUE FALSE FALSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524517.html
標籤:r
上一篇:為什么我的正則運算式回傳無?
