首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R在嵌套列表上使用mapply

R在嵌套列表上使用mapply
EN

Stack Overflow用户
提问于 2020-04-08 17:18:44
回答 3查看 119关注 0票数 5

使用基R,我想在嵌套列表上使用mapply函数。例如,在下面的代码中,我试图从嵌套列表的每个元素中删除字母"a“。我想用一行代码替换最后两行代码。

代码语言:javascript
复制
mylist <- list(
    list(c("a", "b", "c"), c("d", "e", "f")),
    list(c("a", "v", "w"), c("x", "y"), c("c", "b", "a"))
)

mylist

not_a <- lapply(mylist, lapply, `!=`, "a")

not_a

mylist[[1]] <- mapply(`[`, mylist[[1]], not_a[[1]], SIMPLIFY = FALSE)

mylist[[2]] <- mapply(`[`, mylist[[2]], not_a[[2]], SIMPLIFY = FALSE)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-08 17:24:27

双循环Map/mapply将完成问题所要求的任务。

代码语言:javascript
复制
Map(function(i) mapply(`[`, mylist[[i]], not_a[[i]], SIMPLIFY = FALSE), seq_along(mylist))

更简单:

代码语言:javascript
复制
Map(function(x, y) Map(`[`, x, y), mylist, not_a)
票数 2
EN

Stack Overflow用户

发布于 2020-04-08 17:27:36

一种选择可以是:

代码语言:javascript
复制
rapply(mylist, how = "replace", function(x) x[x != "a"])

[[1]]
[[1]][[1]]
[1] "b" "c"

[[1]][[2]]
[1] "d" "e" "f"


[[2]]
[[2]][[1]]
[1] "v" "w"

[[2]][[2]]
[1] "x" "y"

[[2]][[3]]
[1] "c" "b"
票数 5
EN

Stack Overflow用户

发布于 2020-04-08 17:26:14

或者使用map2

代码语言:javascript
复制
library(purrr)
map2(mylist, not_a, ~ map2(.x, .y, `[`))

或者使用map_depth (如果OP只对最终结果感兴趣)

代码语言:javascript
复制
map_depth(mylist, 2,  ~ .x[.x != 'a'])
#[[1]]
#[[1]][[1]]
#[1] "b" "c"

#[[1]][[2]]
#[1] "d" "e" "f"


#[[2]]
#[[2]][[1]]
#[1] "v" "w"

#[[2]][[2]]
#[1] "x" "y"

#[[2]][[3]]
#[1] "c" "b"

或者说更紧凑

代码语言:javascript
复制
map_depth(mylist, 2, setdiff, 'a')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61106324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档