在后续元素对上应用函数

时间:2014-04-05 19:53:55

标签: r vector

假设x是向量,myfunc是两个参数的函数。我希望在myfunc的后续元素对上得到x结果的向量。根据定义,该向量的长度应小于x的长度。

例如,如果x <- 1:4

myfunc <- function(a,b) {
  return(log(b/a))
}

然后我会期待

> apply_on_pairs(x, myfunc)
[1] 0.6931472 0.4054651 0.2876821

(相当于c(myfunc(1,2), myfunc(2,3), myfunc(3,4))

3 个答案:

答案 0 :(得分:1)

library(zoo)

x <- 1:4

rollapply(x, width=2, FUN=function(x) return(log(x[2]/x[1])))

## [1] 0.6931472 0.4054651 0.2876821

答案 1 :(得分:1)

在这种情况下,您可以diff()向量的log()

x <- 1:4
diff(log(x))

收率:

> diff(log(x))
[1] 0.6931472 0.4054651 0.2876821

更新:我更通用的解决方案使用head()tail()删除最后和第一个元素。您希望尽力遵守矢量化解决方案,这些解决方案应该更快,更节省内存。

myFun <- function(x) log(tail(x, -1)) - log(head(x, -1))

{em}

diff()

答案 2 :(得分:1)

mapply(myfunc,x[-length(x)],x[-1])
# [1] 0.6931472 0.4054651 0.2876821

mapply(...)&#34;适用&#34;后续参数的第一个参数中的函数,在这种情况下,我们将x[1:3]x[2:4]作为第二个参数传递给mapply(...)