Как установить ffdf по индексу?

Я хотел бы поместить объект ffdf в индекс, возвращая другой объект ffdf.

Файл справки в 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. Сначала я подумал, что это может быть ограничением памяти, но, глядя на монитор активности, у меня все еще есть 4 ГБ из 8 ГБ. И кроме того, это не должно сильно загружать память.

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
Другие вопросы по тегам