Я хочу написать функцию, которая динамически использует различные методы корреляции в зависимости от шкалы измерения функции (непрерывная, дихотомическая, порядковая).Метка всегда сплошная.Моя идея состояла в том, чтобы использовать функцию 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)