具有嵌套应用的矩阵的循环列

Loop columns of matrix with nested apply

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

假设我有以下矩阵:

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 函数来获取上述输出以了解有关它们的更多信息。

我们得到'a'、'b'对应元素的序列,使用Mapunlist创建一个vector并分配[的行=18=] 到 NA 基于那个。

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