0

我正在尝试使用 RevoScaleR 中的 rxDataStep 函数在 .xdf 数据集上创建一个新的因子列:

rxDataStep(nyc_lab1
         , nyc_lab1
         , transforms = list(RatecodeID_desc = factor(RatecodeID, levels=RatecodeID_Levels, labels=RatecodeID_Labels))
         , overwrite=T
         )

其中 nyc_lab1 是指向 .xdf 文件的指针。我知道该文件很好,因为我将它导入数据表并成功创建了一个新的因子列。

但是,我收到以下错误消息:

Error in doTryCatch(return(expr), name, parentenv, handler) : 
  ERROR: The sample data set for the analysis has no variables.

有什么问题?

4

1 回答 1

2

首先,RevoScaleR在替换数据方面存在一些缺陷。特别是,用输出覆盖输入文件有时会导致rxDataStep失败,原因不明。

即使它有效,你也可能不应该这样做。如果您的代码中有错误,您可能会破坏您的数据。相反,每次都写入一个新文件,并且只有在您确认不再需要旧文件后才删除它。

其次,您引用的任何不属于数据集本身的对象都必须通过transformObjects参数传入。见?rxTransform。基本上, rx* 函数旨在可移植到分布式计算上下文,其中运行代码的 R 会话与本地会话不同。在这种情况下,您不能假设全局环境中的对象将存在于代码执行的会话中。

尝试这样的事情:

nyc_lab2 <- RxXdfData("nyc_lab2.xdf")
nyc_lab2 <- rxDataStep(nyc_lab1, nyc_lab2,
    transforms=list(
         RatecodeID_desc=factor(RatecodeID, levels=.levs, labels=.labs)
    ),
    rxTransformObjects=list(
         .levs=RatecodeID_Levels,
         .labs=RatecodeID_Labels
    )
)

或者,您可以使用dplyrXdf来为您处理所有这些文件管理业务:

nyc_lab2 <- nyc_lab1 %>% factorise(RatecodeID)
于 2017-03-12T10:44:34.580 回答