为什么下面的MSR代码不替换原始列"Var1"?
rxDataStep(inData = input_xdf, outFile = input_xdf, overwrite = TRUE,
transforms = list(Var1 = as.numeric(Var1)),
transformVars = c("Var1")
)发布于 2016-12-17 12:54:46
目前,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-16 15:48:55
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)https://stackoverflow.com/questions/41165139
复制相似问题