【问题标题】:lapply to turn specified matrix elements within list to NAlapply 将列表中的指定矩阵元素转换为 NA
【发布时间】:2016-01-10 02:31:54
【问题描述】:

我有一个矩阵列表(玩具示例):

x <- matrix(1:20, nrow = 2, ncol = 10)
y <- matrix(1:20, nrow = 2, ncol = 10)

l <- list(x ,y)

我需要将一些元素 >= 11 变成 NA。

在我只会使用的列表之外

x[(x>= 11)] <- NA

但尝试应用相同的函数似乎会将其应用于整个矩阵(即每个矩阵变成单个 NA 值)。

l_na <- lapply(l, function(x) x[(x >= 11)] <- NA)

我显然对 lapply 有一些误解。一个解决方案和我在这里出错的任何指针将不胜感激。

【问题讨论】:

    标签: r matrix lapply


    【解决方案1】:

    这行得通

    l_na <- lapply(l, function(x) { x[(x >= 11)] <- NA; x })
    l_na
    
    ##[[1]]
    ##     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    ##[1,]    1    3    5    7    9   NA   NA   NA   NA    NA
    ##[2,]    2    4    6    8   10   NA   NA   NA   NA    NA
    ##
    ##[[2]]
    ##     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
    ##[1,]    1    3    5    7    9   NA   NA   NA   NA    NA
    ##[2,]    2    4    6    8   10   NA   NA   NA   NA    NA
    

    像上面一样添加x 作为返回值是一种选择。不知道还有没有。

    【讨论】:

      【解决方案2】:

      我们可以使用replace

      l_na <- lapply(l, function(x) replace(x, x>=11, NA))
      l_na
      #[[1]]
      #     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
      #[1,]    1    3    5    7    9   NA   NA   NA   NA    NA
      #[2,]    2    4    6    8   10   NA   NA   NA   NA    NA
      
      #[[2]]
      #     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
      #[1,]    1    3    5    7    9   NA   NA   NA   NA    NA
      #[2,]    2    4    6    8   10   NA   NA   NA   NA    NA
      

      或者打高尔夫球

      lapply(l, function(x) x*NA^(x>=11))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 1970-01-01
        • 2014-10-16
        • 1970-01-01
        • 2010-12-03
        相关资源
        最近更新 更多