Благодаря @ user20650 для ответа:
set.seed(1)
mx <- matrix(runif(1e7), ncol=5)
С apply
:
system.time(which.min.mx <- apply(mx, 1, which.min))
# user system elapsed
# 4.7 0.0 4.7
с max.col
:
system.time(mx.mins.2 <- max.col(-mx, ties="first"))
# user system elapsed
# 0.12 0.00 0.13
all.equal(which.min.mx, mx.mins.2)
# [1] TRUE
Старый Ответ: Это лучшее, что я подошел w Ith. Надеюсь, у кого-то есть что-то лучше, как встроенный в row.which.min
или некоторые такие. Данные:
Использование pmin
, ==
, %%
, и некоторый вектор рециркуляция:
system.time({
row.min <- do.call(pmin, as.data.frame(mx))
mx.mins <- which(t(mx == row.min)) %% ncol(mx)
mx.mins[!mx.mins] <- ncol(mx)
})
# user system elapsed
# 0.51 0.00 0.51
all.equal(which.min.mx, mx.mins)
# [1] TRUE
Не говоря уже о таких падениях плашмя на его лицо, если есть больше чем один минимальное значение в строке.
Помогает ли 'max.col' здесь? http://stackoverflow.com/questions/27404710/finding-the-column-number-of-the-smallest-element-in-a-certain-row – user20650
@ user20650, удивительный, не могу поверить, что я пропустил его в docs для 'which.min'; пожалуйста, отправьте ответ, и я соглашусь. – BrodieG
Пожалуйста, не стесняйтесь обновлять свои данные - вы уже сделали всю тяжелую работу – user20650