Как создать новый столбец в формате 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. Буду признателен за любую помощь!

0 ответов

Другие вопросы по тегам