假设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))
)
答案 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(...)
。