如何不使用which()、match()、%in%获取向量最大值的唯一索引?
修正R代码获取向量最大值索引(不使用which()/match()/%in%)
原代码的问题在于,每次更新最大值后立刻打印当前索引,导致所有阶段性最大值的索引都被输出。要实现仅获取最终最大值的索引,可采用以下两种修正方案:
方案一:分两次遍历(先找最大值,再找索引)
vect_1 <- c(2, 3, 1, 4, 5, 10, 7, 6, 9, 8) n <- length(vect_1) max_value <- vect_1[1] # 第一次遍历:确定向量中的最大值 for (i in 1:n) { if (vect_1[i] > max_value) { max_value <- vect_1[i] } } # 第二次遍历:找到最大值对应的索引 max_index <- 1 for (i in 1:n) { if (vect_1[i] == max_value) { max_index <- i } } print(max_index)
方案二:单次遍历同时跟踪最大值与索引(更高效)
vect_1 <- c(2, 3, 1, 4, 5, 10, 7, 6, 9, 8) n <- length(vect_1) max_value <- vect_1[1] max_index <- 1 for (i in 1:n) { # 发现更大值时,同步更新最大值和对应索引 if (vect_1[i] > max_value) { max_value <- vect_1[i] max_index <- i } } print(max_index)
说明
方案二只需一次遍历即可完成,效率更高。循环过程中,仅当遇到比当前最大值更大的元素时,才更新最大值和对应的索引。循环结束后,max_index就是目标最大值的索引,执行print(max_index)会输出[1] 6,符合预期需求。
内容的提问来源于stack exchange,提问作者user20253433
相关产品推荐
相关产品推荐

