gpt4 book ai didi

r - 合并大量逻辑向量

转载 作者:行者123 更新时间:2023-12-03 20:03:55 25 4
gpt4 key购买 nike

我有一个很大的 TRUE/FALSE 逻辑向量列表(144 个列表元素,每个元素长约 2300 万)。我想使用 any 合并它们以生成一个逻辑向量。如果每个列表元素的第一个元素中的任何一个为 TRUE,则返回 TRUE,依此类推向量的长度。这是一个例子:

#  Some data
set.seed(1)
ll <- replicate(3,sample(c(TRUE,FALSE),5,TRUE),simplify=F)

#[[1]]
#[1] TRUE TRUE FALSE FALSE TRUE

#[[2]]
#[1] FALSE FALSE FALSE FALSE TRUE

#[[3]]
#[1] TRUE TRUE FALSE TRUE FALSE

# What I want (and one way of doing it)...
apply( do.call(cbind,ll) , 1 , any )
# [1] TRUE TRUE FALSE TRUE TRUE

等等,您已经在该代码中发布了解决方案,为什么还要问这个问题?

我的真实数据中有 144 个向量,每个向量的长度为 23,721,703。尝试上述操作会引发错误,例如:

# *** caught segfault ***
#address 0x18, cause 'memory not mapped'

OR

#Error in aperm.default(X, c(s.call, s.ans)) :
# long vectors not supported yet: memory.c:1648

我在具有 112Gb RAM 的 Ubuntu 64 位上运行 R 3.0.2。

最佳答案

你可以使用Reduce

  Reduce('|', ll)

基准

set.seed(1)
ll <- replicate(144, sample(c(TRUE, FALSE), 1e5,
replace=TRUE), simplify=FALSE)
system.time(apply(do.call(cbind, ll), 1, any))
# user system elapsed
# 0.575 0.022 0.598

system.time(Reduce(`|`, ll))
# user system elapsed
# 0.287 0.008 0.295

关于r - 合并大量逻辑向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30789959/

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