是否可以从RevoScaleR(R Server)中的rxDataStep()调用统计函数

时间:2017-04-04 07:42:01

标签: r microsoft-r

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

我认为我可以使用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)

我的问题是,如果数据不适合RAM,我可以使用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 个答案:

答案 0 :(得分: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以获取文档,因为可以执行更高级的子集化。