1

我正在使用相关的 EdX 课程学习 RevoScaleR (R Server)。

我坚信我可以使用 rxDataStep() 来提供传递给“转换”参数的函数或构造,其中包含位于磁盘上的数据块,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)

我的问题是,如果数据不适合 RAM,我是否可以使用 rxDataStep() 向诸如 lm() 之类的统计函数提供数据块。第一次尝试没有成功。IE:

rxDataStep(nyc_xdf, transforms = list(lm1 = lm(fare_amount ~ trip_distance)))

返回错误消息:

ERROR: The sample data set for the analysis has no variables.

如果 rxDataStep() 不是正确的方法,那么正确的方法是什么?

您的建议将不胜感激。

4

1 回答 1

0

要将数据提供给统计函数,其中数据不适合内存,请使用相应的 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 获取文档,因为可以执行更高级的子集。

于 2017-04-10T21:53:42.557 回答