Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免R中的循环_R_Loops - Fatal编程技术网

避免R中的循环

避免R中的循环,r,loops,R,Loops,我决定学习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]) 1类似于b=filter(a,rep(1.0/5,5),sides=1)的东西将完成这项工作,尽管您可能会在前几个插槽中得到零,而不是NaN。R有一个大型的内置函数

我决定学习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])

1类似于
b=filter(a,rep(1.0/5,5),sides=1)的东西将完成这项工作,尽管您可能会在前几个插槽中得到零,而不是NaN。R有一个大型的内置函数库,“R风格”就是尽可能地使用这些函数。请查看
过滤器
功能的文档。

类似
b=filter(a,rep(1.0/5,5),sides=1)
将完成此工作,尽管您可能会在前几个插槽中得到零,而不是NaN。R有一个大型的内置函数库,“R风格”就是尽可能地使用这些函数。请查看
过滤器
功能的文档。

因为这些滚动功能通常适用于时间序列数据,一些更新更丰富的时间序列数据处理软件包已经为您提供了:

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> 
R>库(动物园)##加载动物园
R> 速度zsp rollmean(zsp,5)##默认使用
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”)###带填充并对齐
1   2   3   4   5   6   7   8   9  10  11 
NA NA NA 1.0 1.6 2.6 3.0 4.0 5.4 6.4
R>

有优秀的文档,将向您展示更多的示例,特别是如何使用真实(可能是不规则)日期执行此操作;进一步扩展了这一点,但这是一个更好的起点。

因为这些滚动函数通常适用于时间序列数据,一些更新更丰富的时间序列数据处理包已经为您提供了:

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> 
R>库(动物园)##加载动物园
R> 速度zsp rollmean(zsp,5)##默认使用
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”)###带填充并对齐
1   2   3   4   5   6   7   8   9  10  11 
NA NA NA 1.0 1.6 2.6 3.0 4.0 5.4 6.4
R>

有优秀的文档,将向您展示更多的示例,特别是如何使用真实(可能是不规则)日期执行此操作;进一步扩展,但这是一个更好的起点。

您还可以使用
cumsum
diff
的组合来通过滑动窗口获得总和。您需要使用自己的
NaN
,不过:

> speed <- c(1,1,1,1,1,4,6,3,6,8,9)
> diff(cumsum(c(0,speed)), 5)/5
[1] 1.0 1.6 2.6 3.0 4.0 5.4 6.4
>速度差(总和(c(0,速度)),5)/5
[1] 1.0 1.6 2.6 3.0 4.0 5.4 6.4

您还可以使用
cumsum
diff
的组合来通过滑动窗口获得总和。您需要使用自己的
NaN
,不过:

> speed <- c(1,1,1,1,1,4,6,3,6,8,9)
> diff(cumsum(c(0,speed)), 5)/5
[1] 1.0 1.6 2.6 3.0 4.0 5.4 6.4
>速度差(总和(c(0,速度)),5)/5
[1] 1.0 1.6 2.6 3.0 4.0 5.4 6.4

是的,这可能是最简单的移动平均线实施是的,这可能是最简单的移动平均线实施