通过合并列表输出来创建数据框

时间:2020-05-09 04:49:32

标签: r list function dataframe for-loop

下面是我的代码,其中使用功能Area来查找值AUC和Cutoff。

Area<-function(x){
library(ROCR)
library(Metrics)
log_predict <- predict(lr1,newdata = valid,type = "response")
log_predict <- ifelse(log_predict > x,1,0)
pr <- prediction(log_predict,valid$target)
perf <- performance(pr,measure = "tpr",x.measure = "fpr")
plot(perf)
a<-auc(valid$target,log_predict)
list(AUC=a,cutoff=x)
}
for (i in seq(from=0.1, to=0.2, by=0.01)){
  df<-as.data.frame(do.call(rbind, Area(i)))
  str(df)

}

我得到的输出为

'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.779 0.1
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.78 0.11
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.779 0.12
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.778 0.13
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.776 0.14
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.773 0.15
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.77 0.16
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.767 0.17
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.763 0.18
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.759 0.19
'data.frame':   2 obs. of  1 variable:
 $ V1: num  0.756 0.2

我希望我的输出是一个数据帧,其中列为AUC和Cutoff,并且值都在一个数据帧中表示,而不是在多个数据帧中。

2 个答案:

答案 0 :(得分:1)

使用lapply为不同的值依次传递Area函数。

df <- do.call(rbind.data.frame, lapply(seq(from=0.1, to=0.2, by=0.01), Area))

purrr中,我们可以使用map_df来缩短时间。

df <- purrr::map_df(seq(from=0.1, to=0.2, by=0.01), Area)

答案 1 :(得分:0)

这里是sapply

的一个选项
 sapply(seq(from=0.1, to=0.2, by=0.01), Area)