Как создать новый столбец в формате xdf с помощью rxDataStep, проверка нескольких столбцов с помощью RevoScaleR
Для жизни я не могу понять это. Я хотел бы создать новый столбец, который указывает, присутствует ли строка в любом другом столбце в этой строке. Я пытаюсь заставить его работать с пакетом RevoScaleR rxDataStep, потому что я должен заставить его работать с большим набором данных, слишком большим для памяти.
То, что я сделал, используя набор данных, предоставленный до сих пор пакетом RevoScaleR, было сначала попыткой сопоставления строк в одном столбце:
myData <- data.frame(x = 1:100, y = rep(c("a", "b", "c", "d"), 25),
z = rnorm(100), w = runif(100))
findStr1 = function(data) {
foundInRow = grepl('a', data$y)
data$Str = foundInRow
return(data)
}
findStr1(myData) # works as expected
rxDataStep(myData, transformFunc = findStr1) # no error
Это отлично работает. Проблема в том, что когда я меняю функцию findStr, чтобы попытаться проверить несколько столбцов. Я хочу обобщить функцию, чтобы я мог найти совпадение в нескольких строках среди нескольких возможных строк, c('q','a') в этом примере. Я также был бы признателен за советы по наиболее эффективному способу сделать это, но это не главное в этом вопросе (я остановился на использовании операции set intersect(), чтобы определить, было ли хотя бы одно совпадение между символами в строке и целевые строки, чтобы соответствовать). Я изменил функцию findStr, как показано ниже:
findStr2 = function(data) {
foundInRow = apply(data, 1, function(row) {
length(intersect(as.character(row), c('q','a'))) >= 1
})
data$Str = foundInRow
return(data)
}
Обратите внимание, что этот вывод точно такой же, как findStr1(mydata)
findStr2(myData)
Давай, проверь...
findStr2(myData) == findStr1(myData)
...если ты хочешь. Теперь, когда я бегу:
rxDataStep(myData, transformFunc = findStr2)
Я получил:
ERROR: The sample data set for the analysis has no variables.
Caught exception in file: CxAnalysis.cpp, line: 3848. ThreadID: 8952
Rethrowing.
Caught exception in file: CxAnalysis.cpp, line: 5375. ThreadID: 8952
Rethrowing.
Error in doTryCatch(return(expr), name, parentenv, handler) :
ERROR: The sample data set for the analysis has no variables.
Я полностью в тупике. Не должно быть необходимости в аргументе transformObjects, так как все переменные определены в области действия функции findStr2. Буду признателен за любую помощь!