合并大量逻辑向量
Merge a large list of logical vectors
我有一个很大的 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
我是 运行 R 3.0.2 Ubuntu 64 位,112Gb RAM。
您可以使用 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
我有一个很大的 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
我是 运行 R 3.0.2 Ubuntu 64 位,112Gb RAM。
您可以使用 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