Можно ли вызвать статистическую функцию из rxDataStep() в RevoScaleR (R Server)
Я изучаю RevoScaleR (R Server), используя соответствующий курс EdX.
Мне кажется, что я могу использовать rxDataStep() для подачи функций или конструкций, переданных в аргумент "transforms", с кусками данных, которые находятся на диске, которые rxDataStep преобразует в кадры данных. rxDataStep() продолжается до тех пор, пока все данные не будут обработаны и преобразование не будет завершено. Так, например, следующий код создает новый столбец "tip_percent":
rxDataStep(nyc_xdf, nyc_xdf,
transforms = list(tip_percent = ifelse(fare_amount > 0 & tip_amount < fare_amount, round(tip_amount * 100 / fare_amount, 0), NA)),
overwrite = TRUE)
Мой вопрос заключается в том, могу ли я использовать rxDataStep() для подачи статистических функций, таких как lm(), с кусками данных в случаях, когда данные не помещаются в ОЗУ. Первая попытка не удалась. То есть:
rxDataStep(nyc_xdf, transforms = list(lm1 = lm(fare_amount ~ trip_distance)))
возвращает сообщение об ошибке:
ERROR: The sample data set for the analysis has no variables.
Если rxDataStep() не подходит, что будет правильным?
Ваш совет будет оценен.
1 ответ
Для подачи данных в статистические функции, где данные не помещаются в память, используйте соответствующую функцию rx. Для вашего примера вы используете файл XDF, вы бы использовали RxXdfData() и rxLinMod() следующим образом:
nyc_xdf <- RxXdfData("<path_to_xdf_file>", blocksPerRead = <number>)
lm1 <- rxLinMod(fare_amount ~ trip_distance, nyc_xdf)
Кроме того, rxLinMod() может напрямую принимать XDF-файл следующим образом:
lm1 <- rxLinMod(fare_amount ~ trip_distance, data = "<path_to_xdf_file>",
blocksPerRead = <number>)
Замена на число строк, которые будут считаны из файла XDF за одну итерацию, позволит вам сегментировать данные в меньшие фрагменты памяти.
Пожалуйста, смотрите?RxLinMod и?RxXdfData для документации, так как может быть выполнено еще более продвинутое подмножество.