【发布时间】:2016-05-22 20:06:12
【问题描述】:
假设我有一个向量v,并想创建另一个长度相同的向量p,它编码v 中每个位置的总位置权重(v 中的 0 代表 0)。例如,对于 v = c(0,1,3,0,1),我得到 p = c(0, 2, 11, 0, 16)。换句话说,p 中的第 i 个元素(即非 0)变为 v[i]*i 加上 p 中的前一个元素(即非 0)。
我想出了一个方法,但它看起来很难看,我担心它的时间/内存效率不是很高 - 我需要在巨大的向量上执行此操作。有什么改进的想法吗?
fun <- function(v){
res <- NULL
s = 0
for(i in 1:length(v)){
ifelse(v[i] == 0, res[i] <- 0, {res[i] <- v[i]*i + s; s <- res[i]})
}
return(res)
}
然后:
> fun(c(0,1,3,0,1))
[1] 0 2 11 0 16
更新:
如何反转这个函数的输出,即从 c(0,2,11,0,16) 回到 c(0,1,3,0,1) ?
【问题讨论】: