为什么下面的MSR代码不会替换原始列“Var1”?替换MSR中的existng列
rxDataStep(inData = input_xdf, outFile = input_xdf, overwrite = TRUE,
transforms = list(Var1 = as.numeric(Var1)),
transformVars = c("Var1")
)
为什么下面的MSR代码不会替换原始列“Var1”?替换MSR中的existng列
rxDataStep(inData = input_xdf, outFile = input_xdf, overwrite = TRUE,
transforms = list(Var1 = as.numeric(Var1)),
transformVars = c("Var1")
)
目前,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"
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)
其实,你的第二个选项赢得没有工作(RevoScaleR中那些恼人的疣之一)。我不认为有任何方法可以改变现有变量的类型,即使你写入不同的文件。 –
@HongOoi,之前可能是真的,但现在不是这样。我在发布之前进行了测试。两种解决方案都可以工我将添加一些代码,使其成为一个工作示例。 –
我收到了不同的结果。邮件已发送。 –
RevoScaleR不允许操作现有变量的原因是什么? – JimBoy
我不在工程团队中,所以我不能给出明确的答案,但这是出于性能原因。 –