【问题标题】:Is it possible to call a Statistical Function from rxDataStep() in RevoScaleR (R Server)是否可以从 RevoScaleR(R 服务器)中的 rxDataStep() 调用统计函数
【发布时间】:2026-01-07 05:10:02
【问题描述】:

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

我确信我可以使用 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() 不是正确的方法,那么正确的方法是什么?

您的建议将不胜感激。

【问题讨论】:

    标签: r microsoft-r


    【解决方案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 获取文档,因为可以执行更高级的子集设置。

    【讨论】:

      最近更新 更多