Как создать новый столбец в формате xdf с помощью rxDataStep, проверка нескольких столбцов с помощью RevoScaleR - PullRequest
0 голосов
/ 14 октября 2018

Для жизни я не могу понять это.Я хотел бы создать новый столбец, который указывает, присутствует ли строка в любом другом столбце в этой строке.Я пытаюсь заставить его работать с пакетом 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.Буду признателен за любую помощь!

...