Использование функции apply () для перебора разных типов данных не работает - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу написать функцию, которая динамически использует различные методы корреляции в зависимости от шкалы измерения функции (непрерывная, дихотомическая, порядковая).Метка всегда сплошная.Моя идея состояла в том, чтобы использовать функцию apply (), поэтому итерируйте по каждому объекту (он же столбец), проверьте его шкалу измерения (числовое, коэффициент с двумя уровнями, коэффициент с более чем двумя уровнями), а затем используйте соответствующую функцию корреляции.К сожалению, мой код, похоже, преобразует каждую функцию в символьный вектор и, как следствие, условие в операторе if всегда ложно для каждого столбца.Я не знаю, почему мой код делает это.Как я могу запретить моему коду преобразовывать мои функции в символьные векторы?

set.seed(42)    
foo <- sample(c("x", "y"), 200, replace = T, prob = c(0.7, 0.3))    
bar <- sample(c(1,2,3,4,5),200,replace = T,prob=c(0.5,0.05,0.1,0.1,0.25))    
y <- sample(c(1,2,3,4,5),200,replace = T,prob=c(0.25,0.1,0.1,0.05,0.5))    
data <- data.frame(foo,bar,y)    
features <- data[, !names(data) %in% 'y']

dyn.corr <- function(x,y){      
  # print out structure of every column
  print(str(x))

  # if feature is numeric and has more than two outcomes use corr.test
  if(is.numeric(x) & length(unique(x))>2){        
    result <- corr.test(x,y)[['r']]        
  } else {        
    result <- "else"        
  }      
}

result <- apply(features,2,dyn.corr,y)

1 Ответ

0 голосов
/ 20 ноября 2018

apply построен для матриц.Когда вы apply обращаетесь к фрейму данных, первое, что происходит, - это приведение вашего фрейма данных в матрицу.Матрица может иметь только один тип данных, поэтому все столбцы ваших данных при этом преобразуются в наиболее общий тип из них.

Используйте sapply или lapply для работы со столбцами фрейма данных..

Это должно работать нормально (я пытался проверить, но я не знаю, какой пакет загрузить, чтобы получить функцию corr.test.)

result <- sapply(features, dyn.corr, income)
...