哪一行没有申请

时间:2015-01-08 19:34:52

标签: r apply min

我确信会存在某种类型(按rowSums等),但我找不到任何东西。基本上,这样做:

apply(mx, 1, which.min)

不使用apply,这样我们就可以避免调用which.min nrow(mx)次的开销,这可能是一个很大的数字。

1 个答案:

答案 0 :(得分:5)

感谢@ 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

老答案:这是我想出的最好的答案。希望有人有更好的内容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

如果连续存在多个最小值,更不用说这种摔倒了。