a <- c(1, 2, 0, 3, 7)
我正在寻找一个函数以返回最小值为3的索引。这是什么?
Answers:
您正在寻找which.min()
:
a <- c(1,2,0,3,7,0,0,0)
which.min(a)
# [1] 3
which(a == min(a))
# [1] 3 6 7 8
(从上面可以看到,当多个元素的最小值绑定在一起时,which.min()
仅返回第一个元素的索引。如果您希望所有与最小值匹配的元素的索引都可以使用第二个结构。)
sum(a == min(a))
。
如果您热衷于效率,那么可以使用Rfast包中的min_max函数,其中index = True
它会同时返回最小值的索引和最大值的索引,其速度比迄今为止已废弃的更快。
例如
a = runif(10000)
Rfast::min_max(a,index=T)
# min max
# 2984 2885
which(a == min(a))
#[1] 2984
a = runif(1000000)
microbenchmark::microbenchmark(
min_max = Rfast::min_max(a,index=T),
which1 = which(a == min(a)),
which2 = which.min(a)
)
Unit: milliseconds
expr min lq mean median uq max neval
min_max 1.889293 1.9123860 2.08242647 1.9271395 2.0359730 3.527565 100
which1 9.809527 10.0342505 13.16711078 10.3671640 14.7839955 111.424664 100
which2 2.400745 2.4216995 2.66374110 2.4471435 2.5985265 4.259249 100
Rfast::min_max
也只会返回一个(第一个?似乎没有记录)领带,因此与比较不公平which(a == min(a))
,这仅在一个人想要所有分钟时才有意义!