Базовый пример не работает для ffwhat из пакета ffbase

Я пытаюсь использовать OHDSI: версию пакета SelfControlledCaseSeries, которая использует пакет ff для обработки больших данных. Но что-то не работает функция ffwhich. Выполнение следующего примера, приведенного в документации ffwhich:

install.packages("ff")
install.packages("ffbase")
x <- ff::ff(10:1)
idx <- ffbase::ffwhich(x, x < 5)

дает мне

Error in if (by < 1) stop("'by' must be > 0") : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In chunk.default(from = 1L, to = 5L, by = c(integer = 46116860184273880),  :
  NAs introduced by coercion to integer range

Я пробовал установить batchbytes на что-то меньшее, запустить скрипт на другом компьютере, а также изменить место хранения ff-файлов, но ошибка остается.

options("ffbatchbytes"=  getOption("ffmaxbytes")/2)
options(fftempdir="C:/Users/OskarG/Desktop/ff_files")

Любые идеи о том, как это исправить?


person Oskar Gauffin    schedule 18.09.2019    source источник


Ответы (1)


Аналогичная ошибка была обнаружена в git-хабе пакета. Похоже, проблема с операционной системой (Windows 10?). @jwijffels указывает причину в комментариях:

У меня нет машины с Windows 10, но проблема явно связана с ff::chunk, а именно с ff::chunk.ff_vector, который определяется следующим образом

Соответствующая часть: b ‹- BATCHBYTES%/%RECORDBYTES. Этот расчет, по-видимому, на вашей машине дает 23058430092136940 по непонятным мне причинам (учитывая, что вы сообщаете, что он работает на Rgui, но не на RStudio).

Вероятно, вы могли бы обойти это, изменив параметр ffbatchbytes на что-то вроде этого options(ffbatchbytes = 84882227) - это номер, который у меня есть на моей старой школе Windows 7.

Я смог воспроизвести вашу ошибку и исправить ее, используя приведенное выше предложение:

library("ff")
library("ffbase")

options(ffbatchbytes = 84882227) #add this line in

x <- ff::ff(10:1)
idx <- ffwhich(x, x < 5)

x[idx][]

[1] 4 3 2 1 #output
person Peter_Evan    schedule 19.09.2019