lapply将列表中的指定矩阵元素转换为NA

时间:2016-01-10 02:31:55

标签: r matrix lapply

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

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

l <- list(x ,y)

我需要将一些&gt; = 11元素转换为NA。

在列表之外我会使用

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

但尝试提供相同的功能似乎将其作为一个整体应用于每个矩阵(即每个矩阵变成单个NA值)。

l_na <- lapply(l, function(x) x[(x >= 11)] <- NA)
我显然误解了一些有关lapply的事情。一个解决方案和任何我在这里错误的指针将不胜感激。

2 个答案:

答案 0 :(得分:3)

这有效

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添加为上述返回值是一种选择。我不知道是否还有其他人。

答案 1 :(得分:3)

我们可以使用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))