哇,我完全失明了。。。我看了申请书、lapply等文件,但什么也找不到。
假设我有一个矢量
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)
zoo包中的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+4
,然后是4+5
,等等)。您可以使用mapply
:
mapply(sum, a[-1], head(a,-1))
#[1] 5 9 28 29 9 124 533 435
您可以使用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])