爲什麼下面的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
我不在工程團隊中,所以我不能給出明確的答案,但這是出於性能原因。 –