【问题标题】:How to subset ffdf by index?如何按索引对ffdf进行子集化?
【发布时间】:2017-11-15 23:03:10
【问题描述】:

我想通过索引对一个 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

根据 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. 起初我认为这可能是内存限制,但查看我的活动监视器,我仍然有 8gb 中的 4gb 可用。此外,无论如何,这不应该在内存中加载太多。

【问题讨论】:

  • subset 的第二个元素需要是一个条件,即一个逻辑向量 (TRUE, FALSE)。您想按索引对列进行子集化吗?
  • 是的,这正是我想要的,按索引子集。

标签: r ff ffbase


【解决方案1】:

参数必须是合乎逻辑的,因此您必须将 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

【讨论】:

  • 谢谢你的回答,You-lee!请查看我对问题的编辑。
  • 我认为这需要一个新问题,因为致命错误。由于没有其他错误消息,我将首先调试子集函数:'> debug(subset.ffdf)',然后尽可能深入函数调用以确定引发致命错误的位置。
猜你喜欢
  • 2013-10-25
  • 2021-11-02
  • 2014-11-22
  • 1970-01-01
  • 2012-11-11
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多