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