0

rollapply関数がデータを進行するにつれて、ウィンドウサイズを大きくするために(または他のR関数を)どのように使用するでしょうか。別の言い方をすれば、最初の適用は最初の要素で機能し、2番目は最初の2つの要素で機能し、3番目は最初の3つの要素で機能します。

4

3 に答える 3

4

minmaxsumまたはを適用しようとしている場合 prod、これらの関数には、次のような累積的な対応物が既にあります。

cummincummaxcumsumおよびcumprod

拡大/拡大するウィンドウでよりエキゾチックな機能を適用するには、単純に使用できますsapply

例えば

# your vector of interest
x <- c(1,2,3,4,5)

sapply(seq_along(x), function(y,n) yourfunction(y[seq_len(n)]), y = x)

基本的な動物園のオブジェクトの場合

x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) - 1
x <- zoo(rnorm(5), x.Date)

# cumsum etc will work and return a zoo object
cs.zoo <- cumsum(x)

# convert back to zoo for the `sapply` solution
# here `sum`
foo.zoo <- zoo(sapply(seq_along(x), function(n,y) sum(y[seq_len(n)]), y= x), index(x))


identical(cs.zoo, foo.zoo)
## [1] TRUE
于 2013-01-11T04:10:44.730 に答える
2

のドキュメント?zooapplyをじっくり見てみると、これであなたが望むことを実行できるaと思います。マトリックスはどこにあり、sum任意の関数にすることができます。

a <- cbind(1:5,1:5)
#      [,1] [,2]
# [1,]    1    1
# [2,]    2    2
# [3,]    3    3
# [4,]    4    4
# [5,]    5    5
rollapply(a,width=seq_len(nrow(a)),sum,align="right")
#      [,1] [,2]
# [1,]    1    1
# [2,]    3    3
# [3,]    6    6
# [4,]   10   10
# [5,]   15   15

しかし、mnel答えは十分で、より一般化できるようです。

于 2013-01-11T04:16:46.210 に答える
0

@mnelの答えに加えて:

よりエキゾチックな機能については、単に sapply を使用できます

sapplyアプローチに時間がかかりすぎる場合は、関数を繰り返し定式化する方がよい場合があります。

于 2013-01-11T06:13:02.410 に答える