gpt4 book ai didi

list - 挑战 : optimize unlisting [easy]

转载 作者:行者123 更新时间:2023-12-03 15:30:22 24 4
gpt4 key购买 nike

因为 SO 最近有点慢,所以我发布了一个简单的问题。如果大鱼留在替补席上并给新秀一个回应的机会,我将不胜感激。

有时我们的对象有大量的大列表元素(向量)。您将如何将此对象“取消列出”为单个向量。证明您的方法比 unlist() 更快.

最佳答案

如果你不需要名字并且你的列表是一层深,那么如果你能打败

.Internal(unlist(your_list, FALSE, FALSE))

在接下来的一年里,我会投票支持你在 SO 上所做的一切!!!

[更新:如果需要非唯一名称并且列表不是递归的,这里是一个比 unlist 改进 100 倍的版本
 myunlist <- function(l){
names <- names(l)
vec <- unlist(l, F, F)
reps <- unlist(lapply(l, length), F, F)
names(vec) <- rep(names, reps)
vec
}

myunlist(list(a=1:3, b=2))
a a a b
1 2 3 2

> tl <- list(a = 1:20000, b = 1:5000, c = 2:30)
> system.time(for(i in 1:200) unlist(tl))
user system elapsed
22.97 0.00 23.00

> system.time(for(i in 1:200) myunlist(tl))
user system elapsed
0.2 0.0 0.2

> system.time(for(i in 1:200) unlist(tl, F, F))
user system elapsed
0.02 0.00 0.02

]

[更新 2:回应来自 Richie Cotton 的 Nr3 挑战。
bigList3 <- replicate(500, rnorm(1e3), simplify = F)

unlist_vit <- function(l){
names(l) <- NULL
do.call(c, l)
}

library(rbenchmark)

benchmark(unlist = unlist(bigList3, FALSE, FALSE),
rjc = unlist_rjc(bigList3),
vit = unlist_vit(bigList3),
order = "elapsed",
replications = 100,
columns = c("test", "relative", "elapsed")
)

test relative elapsed
1 unlist 1.0000 2.06
3 vit 1.4369 2.96
2 rjc 3.5146 7.24

]

PS:我假设一条“大鱼”比你更有名。所以我在这里很小:)。

关于list - 挑战 : optimize unlisting [easy],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4012772/

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