将函数应用于向量的两个元素



哇,我完全失明了。。。我看了申请书、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])

最新更新