循环列的矩阵与嵌套应用

时间:2015-10-28 09:44:42

标签: r loops apply

我试图循环遍历矩阵的列并更改colomns中的某些预定义序列,这些序列以向量的形式提供。

假设我有以下矩阵:

m2 <- matrix(sample(1:36),9,4)

       [,1] [,2] [,3] [,4]
[1,]   11    6    1   14
[2,]   22   16   27    3
[3,]   34   10   23   32
[4,]   21   19   31   35
[5,]   17    9    2    4
[6,]   28   18   29    5
[7,]   20   30   13   36
[8,]   26   33   24   15
[9,]    8   12   25    7

作为一个例子,我的序列开始向量是a,我的序列结束向量是b。因此,要删除所有列的第一个序列是a[1]b[1],第二个a[2]b[2]依此类推。

我的测试代码如下:

testing <- function(x){
  apply(x,2, function(y){  
    a <- c(1,5)
    b <- c(2,8)
    mapply(function(y){
    y[a:b] <- NA; y
    },a,b)
  })
}

预期结果:

        [,1] [,2] [,3] [,4]
[1,]   NA   NA   NA   NA
[2,]   NA   NA   NA   NA
[3,]   34   10   23   32
[4,]   21   19   31   35
[5,]   NA   NA   NA   NA
[6,]   NA   NA   NA   NA
[7,]   NA   NA   NA   NA
[8,]   NA   NA   NA   NA
[9,]    8   12   25    7

实际结果:

 Error in (function (y)  : unused argument (dots[[2]][[1]])

上面的代码有什么问题?我知道我可以将行设置为NA,但我试图通过使用嵌套的apply函数来获取上述输出,以了解有关它们的更多信息。

1 个答案:

答案 0 :(得分:2)

我们得到了&#39; a&#39;,&#39; b&#39;的相应元素序列。使用unlistvector创建m2[unlist(Map(":", a, b)),] <- NA m2 # [,1] [,2] [,3] [,4] # [1,] NA NA NA NA # [2,] NA NA NA NA # [3,] 34 10 23 32 # [4,] 21 19 31 35 # [5,] NA NA NA NA # [6,] NA NA NA NA # [7,] NA NA NA NA # [8,] NA NA NA NA # [9,] 8 12 25 7 并分配&#39; m2&#39;以此为基础的NA。

$.each(item.data