假设我有一个向量
a = c(1,4,5,23,6,3,121,412,23)
我想将函数应用于c(1,4),c(4,5),c(5,23)等。因此,得到的向量应该是长度
length(a)-1
我认为,这很简单。甚至,我想我已经做到了。但感谢您的帮助。
我想要应用的功能基本上是斜率或导数。
感谢我现在的答案:
slope = function(p){
return (p[2] - p[1])
}
foo = rollapply(a, 2, slope)
答案 0 :(得分:7)
动物园包中的rollapply
函数似乎就是你想要的
> library(zoo)
> a
[1] 1 4 5 23 6 3 121 412 23
> rollapply(a, 2, sum)
[1] 5 9 28 29 9 124 533 435
请注意,特定操作有自定义rollxxx类型函数,因此更多细节可以提供更优化的解决方案。
修改:看到您的修改后,您可以清楚地知道所有内容都是diff
。
> diff(a)
[1] 3 1 18 -17 -3 118 291 -389
答案 1 :(得分:2)
假设您要对两个元素(1+4
然后4+5
等)求和。您可以使用mapply
:
mapply(sum, a[-1], head(a,-1))
#[1] 5 9 28 29 9 124 533 435
答案 2 :(得分:0)
您可以使用apply
功能,这通常会让我们的生活更轻松。考虑一个随机函数(让我们称之为foo - 我只会使用base-R):
a = c(1,4,5,23,6,3,121,412,23)
new <- as.data.frame(matrix(a, ncol=2, byrow=TRUE))
mapply(foo, new[, 1], new[, 2])
或者如果该特定函数支持向量化操作:
foo(new[, 1], new[, 2])