我正在尝试使用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.
可能出现什么问题?
答案 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
)
)