我正在使用相关的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()不是要走的路,那会是什么样的?
您的建议将不胜感激。
答案 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以获取文档,因为可以执行更高级的子集化。