我试图遍历一系列值并将我的表计数结果保存在单独的向量或矩阵中。我是编程的新手,请原谅这次糟糕的尝试。
这是我的问题:
pred_test <- seq(0, 1, length=1000)
test$PURCHASER_FLAG <- sample(c(0,1), size=1000, replace= TRUE)
crit = seq(from=0, to=1, by=.01)
list <- matrix(0, nrow=101, ncol=2)
for (i in 1:length(crit)) {
list[i,] <- as.numeric(table(pred_test >= i, test$PURCHASER_FLAG)[2,])
}
我想循环遍历暴击的所有值,并将每个关联表计数的结果保存为名为“list”的新向量中的一行。 Pred_test是0-1的概率分数,而Purchaser标志是0或1的关联类。 我想在暴击中为每个相关的临界阈值保存这些计数。
如果有更简单的方法,请告诉我。
答案 0 :(得分:0)
使用sapply
并确保您生成的所有表格的尺寸相同(2 x 2):
library(dplyr)
library(tidyr)
# generate the data
df_foo = data_frame(
pred_test = runif(1000),
PURCHASER_FLAG = sample(c(0, 1), size = 1000, replace = TRUE)
)
# collect the confusion matrices
m_confusion = sapply(
seq(0, 1, .1), function(x) {
# straighten out the matrix
as.numeric(
# create the confusion matrix
table(
# ensure that all the levels are always represented
factor(
df_foo$pred_test > x, levels = c("TRUE", "FALSE")
),
df_foo$PURCHASER_FLAG
)
)
}
)
# add some dimnames to the matrix created
colnames(m_confusion) = seq(0, 1, 0.1)
# create the rownames from a dummy object
rownames_confusion =
unite(
expand.grid(
dimnames(
table(
factor(
df_foo$pred_test > 0.1, levels = c("TRUE", "FALSE")), df_foo$PURCHASER_FLAG
)
)
), rownames, everything()
)$rownames
# attach the rownames
rownames(m_confusion) = rownames_confusion
# print the final object
m_confusion
这给出了:
> m_confusion
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
TRUE_0 510 467 425 376 318 274 210 157 103 52 0
FALSE_0 0 43 85 134 192 236 300 353 407 458 510
TRUE_1 490 428 374 326 284 246 205 158 111 54 0
FALSE_1 0 62 116 164 206 244 285 332 379 436 490
我确信有一种更简单的方法来创建行dimnames,但我留给你弄清楚。