使用apply为每列矩阵调用rollapply

时间:2016-03-10 14:06:44

标签: r matrix

我有这个矩阵:

> mtrx <- matrix(c(1:30), nrow=10)
> mtrx
      [,1] [,2] [,3]
 [1,]    1   11   21
 [2,]    2   12   22
 [3,]    3   13   23
 [4,]    4   14   24
 [5,]    5   15   25
 [6,]    6   16   26
 [7,]    7   17   27
 [8,]    8   18   28
 [9,]    9   19   29
[10,]   10   20   30
> is.matrix(mtrx)
[1] TRUE

我可以apply以这种方式对每列进行操作(在本例中为mean):

> apply(mtrx, 2, mean)
[1]  5.5 15.5 25.5

我还可以将rollapply函数用于特定列(在本例中为1st)

> require(zoo)
> rollapply(mtrx[,1], width = 2, by = 2, FUN = mean, align = "left")
[1] 1.5 3.5 5.5 7.5 9.5

如何结合上述方法并在每个矩阵列上执行rollapply?我试过以下:

> apply(mtrx, 2, rollapply, width = 2, by = 2, FUN = mean, align = "left")
Error in mean.default(newX[, i], ...) : 
  'trim' must be numeric of length one

方法建议here

> apply(mtrx, 2, function(x) rollapply(width = 2, by = 2, FUN = mean, align = "left"))
Error in index(x) : argument "data" is missing, with no default

但两个都给了我一个我不明白的错误。

1 个答案:

答案 0 :(得分:1)

从评论中移出。

您不需要 echo '<option value="'.$row[Product_Name].'">'.$row[Product_Name].'</option>"'; 。默认情况下,apply已经作用于矩阵的每一列:

rollapply

请参阅rollapply(mtrx, width = 2, by = 2, FUN = mean, align = "left")

此外,您的代码无效的原因是?rollapply被视为传递给FUN=mean的函数,而不是传递给apply的函数。