R为每个变量重复函数并将结果保存在数据帧中:我错在哪里?

R为每个变量重复函数并将结果保存在数据帧中:我错在哪里?,r,R,我有以下数据集 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,

我有以下数据集

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"))
我想在以“var”开头的每个变量和ref-var之间迭代confusionMatrix函数。 对于每个函数应用程序(每个变量),我希望将结果保存在一个新的数据框中,如下所示:

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])
            ) }))
我错在哪里


谢谢你

使用这个稍微改变的方法:

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

所以,您对敏感度的值很满意,但您希望此数据集的格式不同,对吗?
confusionMatrix
是否来自
caret
软件包?嗨,AntoniosK!对我对这些值很满意,但是代码没有在每个应用程序中添加新行,而是在函数中添加新列!是的,它是插入符号包中的confusionMatrix!
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
#    variable Sensitivity
# X1     var1        0.25
# X2     var2           0
# X3      var         0.5
# X4     var3           0
# X5     var5   0.2857143