RevoScaleR包中的rxDataStep崩溃

时间:2017-03-11 18:40:37

标签: r microsoft-r

我正在尝试使用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.

可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

首先,RevoScaleR在更换数据时有some warts。特别是,使用输出覆盖输入文件有时会导致code因未知原因而失败。

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

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

尝试这样的事情:

?rxTransform

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

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
    )
)