我有一个矢量:
?
我需要计算一个矢量,例如,累积平方和:
x <- c(1,2,3,4,5,6,7,8)
其中:y <- c(a1, a2, a3...)
; a1 = 1^2
; a2 = 1^2+2^2
等等。
这就像“cumsum”,但我需要计算我的功能(不仅是sqares的总和,而是任何),就像这样。
谢谢!
答案 0 :(得分:4)
首先对元素进行平方,而不是采用累计和:
y <- cumsum(x^2)
输出:
1 5 14 30 55 91 140 204
对于ln(x1*x2*...xn)
等其他功能,您通常仍可以有效地执行这些功能。如果不可能,您可以使用sapply
,以下四个在输出中都是等效的:
log(cumprod(x))
sapply(cumprod(x), log)
sapply(cumprod(x), function(a) {log(a)})
sapply(1:8, function(i) {log(prod(x[1:i]))}) # not efficient.
然而,请注意,最后一个计算效率低,因为它会多次计算产品(先x1
,然后x1*x2
,然后x1*x2*x3
,然后x1*x2*x3*x4
等。),而其他人使用计算cumprod
的{{1}},并将输出与x1*x2
相乘,将该输出乘以x3
,因此乘法的总数最小化。因此,请注意不要让事情过于复杂。
希望这有帮助!
答案 1 :(得分:2)
Hadley Wickham在Advanced R.中有一个非常好的reference
下面是一个代码示例
func <- function(x, myfun, ...) {
cumsum(myfun(x, ...))
}
#examples
out <- func(1:8, `^`, e2=2)
identical(out, cumsum((1:8)^2))
identical(func(1:8, log), cumsum(log(1:8)))