0

为什么下面的 MSR 代码不替换原始列“Var1”?

rxDataStep(inData = input_xdf, outFile = input_xdf, overwrite = TRUE,
       transforms = list(Var1 = as.numeric(Var1)),
       transformVars = c("Var1")
       )
4

2 回答 2

1

MSR不允许您使用不同的变量类型覆盖原地变量。

您有两个选择:写入不同的变量或写入不同的文件。我添加了一些代码,表明两种解决方案都按MRS 9.0.1. 如评论中所述,在早期版本中有些地方这可能不起作用。我不完全确定这一点在哪里,所以代码应该让你知道。

input_xdf <- "test.xdf"
modified_xdf <- "test_out.xdf"

xdf_data <- data.frame(Var1 = as.character(1:10),
                       Var2 = 2:11,
                       stringsAsFactors = FALSE)

rxDataStep(inData = xdf_data,
           outFile = input_xdf,
           rowsPerRead = 5,
           overwrite = TRUE)

rxDataStep(inData = input_xdf, 
           outFile = input_xdf, 
           overwrite = TRUE,
           transforms = list(Var1b = as.numeric(Var1)),
           transformVars = c("Var1")
)

rxGetInfo(input_xdf, getVarInfo = TRUE, numRows = 5)

rxDataStep(inData = input_xdf, 
           outFile = modified_xdf,
           transforms = list(Var1 = as.numeric(Var1)),
           transformVars = c("Var1")
)

rxGetInfo(modified_xdf, getVarInfo = TRUE, numRows = 5)
于 2016-12-16T15:48:55.520 回答
1

目前,RevoScaleR 不支持更改 xdf 文件中变量的类型(即使您写入不同的文件)。这样做的方法是创建一个新变量,删除旧变量,然后将新变量重命名为旧名称。

我建议使用 transformFunc 执行此操作(?rxTransform有关更多信息,请参阅 ),以便您可以一步创建新变量并删除旧变量:

rxDataStep(inXdf, outXdf, transformFunc=function(varlst) {
    varlst$Var1b <- as.numeric(varlst$Var1)
    varlst$Var1 <- NULL
    varlst
}, transformVars="Var1")

# this is fast as it only modifies the xdf metadata, not the data itself
names(outXdf)[names(outXdf) == "Var1b"] <- "Var1"
于 2016-12-17T12:54:46.377 回答