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

时间:2015-04-02 14:41:38

标签: r

哇,我完全失明了......我读了申请,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)

3 个答案:

答案 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])