gpt4 book ai didi

r - 如何避免在 R 中使用嵌套 lapply?

转载 作者:行者123 更新时间:2023-12-02 04:07:57 27 4
gpt4 key购买 nike

我正在寻找嵌套 lapply 的有效替代方案,我认为在 R 社区中不赞赏使用嵌套结构。任何人都可以提出可能的想法或方法来避免在自定义函数中使用 Nest lapply 吗?

这是快速可重现的示例:

模拟数据

a <- data.frame(
start=seq(1, by=9, len=18), stop=seq(6, by=9, len=18),
ID=letters[seq(1:18)], score=sample(1:25, 18, replace = FALSE))
b <- data.frame(
start=seq(2, by=11, len=20), stop=seq(8, by=11, len=20),
ID=letters[seq(1:20)], score=sample(1:25, 20, replace = FALSE))
c <- data.frame(
start=seq(4, by=11, len=25), stop=seq(9, by=11, len=25),
ID=letters[seq(1:25)], score=sample(1:25, 25, replace = FALSE))

我使用嵌套lapply的函数,但想避免这种情况:

a.big <- a[a$score >10,]
a.sml <- a[(a$score > 6 & a$score <= 10),]
a.non <- a[a$score < 6,]

a_new <- list('big'=a.big, 'sml'=a.sml)
tar.list <- list(b,c)

test <- lapply(a_new, function(ele_) {
re <- lapply(tar.list, function(li) {
out <- base::setdiff(ele_, li)
return(out)
})
})

目标:

避免使用嵌套的lapply,以找到其有效的替代方案。我的意思是为其输出找到更好的表示,它必须易于/快速重现,并允许快速/轻松的下游计算。有什么通用方法可以做到这一点吗?

如何避免在test中使用嵌套lapply?谁能提出解决这个问题的可能想法?谢谢

最诚挚的问候:

杰夫

最佳答案

我不确定你真正想要什么。但是如果您喜欢两个列表的所有组合的 setdiff ,那么您可以使用如下内容:

# all combinations
a <- expand.grid(seq_along(a_new), seq_along(tar.list))
a
Var1 Var2
1 1 1
2 2 1
3 1 2
4 2 2
# apply over all combinations setdiff row-vice
apply(a, 1, function(x, y, z){ setdiff(y[x[1]], z[x[2]])}, a_new, tar.list)[1:2]
[[1]]
[[1]][[1]]
start stop ID score
2 10 15 b 21
3 19 24 c 12
6 46 51 f 23
9 73 78 i 15
10 82 87 j 19
11 91 96 k 25
13 109 114 m 11
16 136 141 p 17
17 145 150 q 18
18 154 159 r 24


[[2]]
[[2]][[1]]
start stop ID score
5 37 42 e 9
14 118 123 n 8
15 127 132 o 7

使用双 [[]] 刹车可以让您仅输出一个列表的更清晰的输出。

apply(a, 1, function(x, y, z){ setdiff(y[[x[1]]],z[[x[2]]])}, a_new, tar.list)

[[1]]
start stop ID score
2 10 15 b 21
3 19 24 c 12
6 46 51 f 23
9 73 78 i 15
10 82 87 j 19
11 91 96 k 25
13 109 114 m 11
16 136 141 p 17
17 145 150 q 18
18 154 159 r 24

[[2]]
start stop ID score
5 37 42 e 9
14 118 123 n 8
15 127 132 o 7

[[3]]
start stop ID score
2 10 15 b 21
3 19 24 c 12
6 46 51 f 23
9 73 78 i 15
10 82 87 j 19
11 91 96 k 25
13 109 114 m 11
16 136 141 p 17
17 145 150 q 18
18 154 159 r 24

[[4]]
start stop ID score
5 37 42 e 9
14 118 123 n 8
15 127 132 o 7

关于r - 如何避免在 R 中使用嵌套 lapply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38478261/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com