我决定学习R.我试图了解如何编写"R风格"函数并避免循环.以下是一个示例情况:
给定一个向量a,我想计算一个向量,b其元素b[i](向量索引从1开始)定义如下:
1 <= i <= 4:
b[i] = NaN
5 <= i <= length(a):
b[i] = mean(a[i-4] to a[i])
Run Code Online (Sandbox Code Playgroud)
基本上,如果我们假装'a'是速度列表,其中第一个条目在时间= 0,第二个在时间= 1秒,第三个在时间= 2秒...我想获得相应的向量描述过去5秒的平均速度.
例如:如果a is (1,1,1,1,1,4,6,3,6,8,9)然后b应该是(NaN, NaN, NaN, NaN, 1, 1.6, 2.6, 3, 4, 5.4, 6.4)
我可以使用循环来做到这一点,但我觉得这样做不会是"R风格".
谢谢,
Tungata
由于这些滚动功能通常适用于时间序列数据,因此一些较新且更丰富的时间序列数据处理包已经为您执行此操作:
R> library(zoo) ## load zoo
R> speed <- c(1,1,1,1,1,4,6,3,6,8,9)
R> zsp <- zoo( speed, order.by=1:length(speed) ) ## creates a zoo object
R> rollmean(zsp, 5) ## default use
3 4 5 6 7 8 9
1.0 1.6 2.6 3.0 4.0 5.4 6.4
R> rollmean(zsp, 5, na.pad=TRUE, align="right") ## with padding and aligned
1 2 3 4 5 6 7 8 9 10 11
NA NA NA NA 1.0 1.6 2.6 3.0 4.0 5.4 6.4
R>
Run Code Online (Sandbox Code Playgroud)
该动物园拥有出色的文档,会告诉你很多很多的例子,特别是如何与真正的(也可能是不规则的)日期,做到这一点; xts进一步扩展了这一点,但动物园是一个更好的起点.