如何通过索引对ffdf进行子集化?

时间:2017-11-15 23:03:10

标签: r ff ffbase

我想通过索引对ffdf对象进行子集化,返回另一个ffdf对象。

help file on subset.ffdf表示您可以传递范围索引(ri)对象作为参数,但是当我尝试时:

data_subset <- subset.ffdf(data, ri(1, 1e5))

我收到了这个错误:

Error in which(eval(e, nl, envir)) : argument to 'which' is not logical

Per You-Leee的建议,我尝试使用以下代码传递感兴趣的索引的逻辑向量:

n <- length(data[[1]]) #10.5 million
logical_index = c(1, 1e5) == seq.int(1, n)
data_subset <- subset(data, logical_index)

我尝试运行它两次,每次我的R-Studio崩溃时都会显示消息R encountered a fatal error. The session was terminated.起初我认为这可能是一个内存限制,但是看着我的活动监视器,我仍然有4gb可用8GB。此外,无论如何,这不应该加载到内存中。

1 个答案:

答案 0 :(得分:0)

参数必须是合乎逻辑的,所以你必须在期望的索引上设置为TRUE,否则为FALSE:

> data <- ffdf(a = ff(1:12))
> subset.ffdf(data, c(1, 1e5) == seq.int(1, length(data$a)))
ffdf (all open) dim=c(1,1), dimorder=c(1,2) row.names=NULL
ffdf virtual mapping
  PhysicalName VirtualVmode PhysicalVmode  AsIs VirtualIsMatrix     PhysicalIsMatrix
a            a      integer       integer FALSE           FALSE                FALSE
  PhysicalElementNo PhysicalFirstCol PhysicalLastCol PhysicalIsOpen
a                 1                1               1           TRUE
ffdf data
  a
1 1