Я хотел бы получить индекс минимума некоторого подмножества вектора, но индекс в исходном векторе, а не перенумерованное подмножество.which.min на подмножество вектора
На данный момент, я использую:
L = rnorm(20) # say this is the original vector
subset = runif(20)<0.3 # some conditions to extract the subset
ind_min = which.min(L[subset])
ind_sel = seq(L)[subset]
ind_min = ind_sel[ind_min]
, но я предполагаю, что там должно быть что-то более прямой или чище. Я думал об использовании трюк, таких как:
L_tmp = L
L_tmp[!subset] = Inf
ind_min = which.min(L_tmp)
, который apparentlty более эффективным:
> microbenchmark(method_1(), method_2(), unit = "relative")
Unit: relative
expr min lq mean median uq max neval
method_1() 3.699562 3.249635 3.119666 3.076819 2.928259 3.225849 100
method_2() 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 100
, но я не очень доволен, потому что я думаю, там должно быть что-то еще. Любое предложение ?
Имейте в виду, что 'which.min' находит первое минимальное значение, тогда как' which' находит все значения, удовлетворяющие условию. – Roland
Роланд, ты прав, спасибо! –
По-видимому, такая же быстрая, как и моя вторая опция, но все вписываются в одну строку: 'ind_min = intersect (что (L == min (L [подмножество])), seq (L) [subset])', так что это может быть лучше! Btw есть ошибка, вы должны добавить 'seq (L) [подмножество]' – clemlaflemme