我们可以把所有东西都包起来
list
a中的元素
列表
lst1 <- list(TP, FP, FN, TN)
这个
列表
元素都是整数类,根据计算,值
*
将得到超过值范围的非常大的数字
integer
。可能它应该转换为大整数类或使用
numeric
library(purrr)
pmap_dbl(lst1, ~ ((as.numeric(..1) * as.numeric(..4)) -
(as.numeric(..2) * as.numeric(..3)))/
sqrt((as.numeric(..1) + as.numeric(..2)) * (as.numeric(..1) +
as.numeric(..3)) * (as.numeric(..4) + as.numeric(..2)) *
(as.numeric(..4) + as.numeric(..3))))
#[1] 0.6340100 0.5344409 0.4563071 0.4068497
此外,作为
列表
如果长度都相等,最好将其转换为
vector
作为data.frame的列,我们可以更容易地应用这些函数
library(dplyr)
library(tidyr)
tibble(TP, FP, FN, TN) %>%
unnest(c(TP, FP, FN, TN)) %>%
mutate_all(as.numeric) %>%
transmute(out = f1(TP, FP, FN, TN))
# A tibble: 4 x 1
# out
# <dbl>
#1 0.634
#2 0.534
#3 0.456
#4 0.407
哪里
f1 <- function(TP, FP, FN, TN) {
((TP * TN) - (FP * FN)) /
sqrt((TP + FP) * (TP+FN) * (TN+FP) * (TN+FN))
}