R Повторите функцию для каждой переменной и сохраните результаты в кадре данных: где я ошибаюсь? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть следующий набор данных

structure(list(var1 = c(1, 0, 0, 0, 1, 0, 1, 1, 1, 1), var2 = c(0, 
1, 0, 1, 1, 1, 1, 1, 1, 1), var = c(1, 1, 1, 0, 1, 0, 1, 1, 1, 
1), var3 = c(1, 0, 1, 0, 1, 1, 1, 1, 1, 1), var5 = c(0, 1, 0, 
1, 1, 0, 0, 0, 0, 0), ref = c(1, 1, 1, 1, 0, 0, 0, 1, 1, 1)), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

Я хочу перебрать функцию confusionMatrix между каждой переменной, начиная с "var" и ref var. Сформируйте каждое приложение функции (каждую переменную). Я хотел бы сохранить результаты в новом фрейме данных следующим образом:

Variable Sensitivity
var1     1
var2     0.87
...

Я написал следующий код:

library(Metrics)
k = grep("^var",colnames(data)) 
results<-as.data.frame(results <- lapply(k, FUN=function(x) {
  cm = confusionMatrix(data=as.factor(data$ref), reference=as.factor(data[[x]]))
  data.frame(
             variable=names(data)[x],
             Sensitivity = unname(cm$byClass[1])
            ) }))

I не получаю ошибок, но результат не тот, который я хочу, так как я получаю data.frame, как это

Variable Sensitivity Variable1 Sensitivity1 Variable2 Sensitivity2
var1     1           var2      0.76         var3      0.54

Где я ошибаюсь?

Спасибо

1 Ответ

0 голосов
/ 06 февраля 2020

Используйте этот слегка измененный подход:

k = grep("^var",colnames(data)) 

results<-data.frame(results <- sapply(k, FUN=function(x) {             # change to sapply
  cm = confusionMatrix(data=as.factor(data$ref), reference=as.factor(data[[x]]))
  data.frame(
    variable=names(data)[x],
    Sensitivity = unname(cm$byClass[1]),
    stringsAsFactors = F)}))     # add this to keep column names as a character variable

results = data.frame(t(results)) # transpose results

И ваш results фрейм данных будет выглядеть как

#    variable Sensitivity
# X1     var1        0.25
# X2     var2           0
# X3      var         0.5
# X4     var3           0
# X5     var5   0.2857143
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...