使用apply时跟踪当前索引

Dav*_*ave 11 r

想看看有人有更优雅的解决方案.但是在使用apply时跟踪当前索引的适当方法是什么.例如,假设我想从我正在评估的当前元素中获取总和,直到我的向量结束.

这是最好的方法吗?

y = rep(1,100)
apply(as.matrix(seq(1:length(y))),1,function(x) { sum(y[x:length(y)])})
Run Code Online (Sandbox Code Playgroud)

我很感激你的意见.

Nic*_*bbe 9

这看起来更像是一项任务sapply:

sapply(seq_along(y), function(x){sum(y[x:length(y)])})
Run Code Online (Sandbox Code Playgroud)

对于您的具体示例,有许多其他选项(如反转向量y然后使用cumsum),但我想这是一般模式:使用seq_along或最坏的情况seq下获取您感兴趣的序列,并将其传递给*apply.

  • 只是澄清所讨论问题的一个问题:如果需要一个索引,那么for循环不是更实用吗?或者我错过了这里的观点? (2认同)
  • @ROLO:`*apply`系列函数通常可以为结果提供非常合理的内存处理,并且如果`simplify = TRUE'以实际形式存储它们(这些简单示例并不明显).从历史上看,它过去常常比"正常"循环快得多,但这不再适用.因此,对于简单的情况,它并不重要. (2认同)