【问题标题】:rxDataStep in RevoScaleR package crashingRevoScaleR 包中的 rxDataStep 崩溃
【发布时间】:2017-03-11 18:40:36
【问题描述】:

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

可能出了什么问题?

【问题讨论】:

    标签: r microsoft-r


    【解决方案1】:

    首先,RevoScaleR 在替换数据方面有some warts。特别是,用输出覆盖输入文件有时会导致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)
    

    【讨论】:

    • 谢谢,但即使我写入一个新文件,它仍然会崩溃并显示相同的错误消息。
    • 我忘记了transformObjects 部分。看看它现在是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多