首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义lapply函数

定义lapply函数
EN

Stack Overflow用户
提问于 2019-09-14 13:37:12
回答 1查看 76关注 0票数 0

我有一个标签名为df,包含了几个分类器的结果:准确性,Npv,Ppv等。

我想在称为“点”的数据框架中增加一个新列,其中包含这种加权计算:

代码语言:javascript
复制
Points = Accuracy* 0,20 + Specificity *0,10 + Sensitivity *0.35 + Neg Pre Value*0.10 + Pos Pred value*0.25)

我试着用这种方式来使用:

代码语言:javascript
复制
df$Points <- apply(df[,3:7],1,make.calc)

该函数将使其计算从第3列到第7列,并将结果存储在一个名为Point的新列中。

我还以这样的方式定义了我的函数make.calc:

代码语言:javascript
复制
make.calc <- function(x) {
t <- function(x) { 
df$Accuracy * 0.2 + df$Specificity * 0.1 + df$Sensitivity * 0.35 + df$Neg_Pred_Value * 0.1 + df$Pos_Pred_Value * 0.25 }
 t } 

但是我得到的是一个名为Point的新列,它包含一个字符串,模型定义了above...not,这是我需要的计算!

有人能帮我理解我的代码出了什么问题吗??

这是我的df的dput:

代码语言:javascript
复制
> dput(head(df))
structure(list(Model = structure(1:6, .Label = c("Decision Tree", 
"Naive Bayes", "Neural Networks", "Random Forest", "SVM Linear", 
"SVM Radial"), class = "factor"), `Data source` = c("Without_DownSampling", 
"Without_DownSampling", "Without_DownSampling", "Without_DownSampling", 
"Without_DownSampling", "Without_DownSampling"), Specificity = c("0.984", 
"0.490", "0.980", "0.998", "0.982", "0.980"), `Pos Pred Value` = c("0.937", 
"0.321", "0.917", "0.991", "0.924", "0.917"), Accuracy = c("0.980", 
"0.588", "0.969", "0.996", "0.966", "0.967"), Sensitivity = c("0.963", 
"0.991", "0.926", "0.991", "0.898", "0.917"), `Neg Pred Value` = c("0.991", 
"0.995", "0.982", "0.998", "0.975", "0.980")), .Names = c("Model", 
"Data source", "Specificity", "Pos Pred Value", "Accuracy", "Sensitivity", 
"Neg Pred Value"), row.names = c(NA, 6L), class = "data.frame")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-14 16:56:30

在您提供的示例中,几乎所有变量都被分类为字符串。不幸的是,您不能对字符串执行任何计算,所以应该首先将它们全部转换为数值变量。

代码语言:javascript
复制
df <- data.frame(purrr::map_at(df, 3:7, as.numeric), stringsAsFactors = FALSE)

这是一种方法,但我相信还有其他更好的选择。您还需要修复变量名,以便它们中没有空格。注意,Neg Pre Value不是一个好名字--建议您适应Neg_Pre_Value或类似的东西。

然后,您不需要一个函数来执行您想要的任务。

您可以简单地定义新变量如下:

代码语言:javascript
复制
df$Points <- df$Accuracy * 0.2 + df$Specificity * 0.1 + df$Sensitivity * 0.35 + df$Neg_Pred_Value * 0.1 + df$Pos_Pred_Value * 0.25 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57936034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档