我有一个预测结果矩阵,我想在矩阵的每一行中找到绝对最大概率:
> head(TestResult)
c290 c320 c390 c460 c520 c580 c710 c780 c800 c100001
[1,] 0.00000000 0.00000000 0.06666667 0.25000000 0.14285714 0.00000000 0.3333333 0.26666667 0.06666667 0.04545455
[2,] 0.01808511 0.05480869 0.01342282 0.01968504 0.03144654 0.02349336 0.5382199 0.07889344 0.11472081 0.05813953
[3,] 0.00000000 0.00000000 0.00000000 0.33333333 0.25000000 0.00000000 0.2000000 0.33333333 0.50000000 0.28571429
[4,] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000 0.00000000
[5,] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000 0.00000000
[6,] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000 0.00000000
>
如您所见,在最后三行中没有概率值。到目前为止,我的代码是:
BNpred <- colnames(TestResult)[max.col(TestResult,ties.method = "first")]
BNpred <- substring(BNpred,2)
然后对于具有所有相等值的行,R返回默认类“290”(见下文)。虽然我希望那里有一个NA,所以默认数字不会影响我的预测器的准确性。
> head(BNpred)
[1] "710" "710" "800" "290" "290" "290"
我应该如何更改代码,以便在所有行等于零时将NA指定为最大值?
答案 0 :(得分:1)
您可以添加以下这一行:
BNpred[rowSums(abs(TestResult)) == 0] <- NA
或者这个
BNpred[!apply(TestResult,1,any)] <- NA
答案 1 :(得分:0)
感谢@Moody_Mudskipper的回答。昨晚我想出了另一个解决方案,所以我在这里写给别人:
for (i in 1:1430){
if(max(TestResult[i,])==0){
BNpred[i] = "NA" }}