如何计算R语言中概率矩阵每行最大值与次大值的比值
你之前尝试的代码写法有误,apply的FUN参数需要传入接收行向量作为输入的函数,且你仅通过order拿到了前两大值的索引,没有取出对应值做比值计算,以下是可直接运行的实现:
实现方案
方法1:Base R原生实现(无需额外安装包)
直接对每行做降序排序,取前两个值计算比值即可:
# 构造你的示例概率矩阵 p_matrix <- matrix( c(0.0002, 0.3746, 0.0165, 0.0034, 0.0274, 0.0142, 0.0000, 0.0005, 0.0000, 0.0000, 0.0000, 0.0002, 0.0000, 0.0000, 0.9847, 0.0052, 0.0000, 0.0000, 0.0000, 0.0001), nrow = 4, byrow = TRUE ) # 逐行计算最大/次大概率比值 row_ratio <- apply(p_matrix, MARGIN = 1, function(row_vec) { sorted <- sort(row_vec, decreasing = TRUE) sorted[1] / sorted[2] }) # 按需求保留小数位数输出 round(row_ratio, 2)
运行后输出和你的预期完全一致:
[1] 13.67 28.40 4923.50 52.00
方法2:matrixStats包实现(适合大矩阵,性能更高)
如果处理的是万行以上的大矩阵,用matrixStats包的向量化函数比apply效率高很多:
# 首次运行先安装包:install.packages("matrixStats") library(matrixStats) row_max <- rowMaxs(p_matrix) # 升序排序的倒数第二位就是次大值 row_second_max <- rowOrderStats(p_matrix, which = ncol(p_matrix) - 1) row_ratio <- row_max / row_second_max
内容的提问来源于stack exchange,提问作者Juan C
相关产品推荐
相关产品推荐

