lapply 将列表中的指定矩阵元素转为 NA
lapply to turn specified matrix elements within list to NA
我有一个矩阵列表(玩具示例):
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
但试图lapply 相同的函数似乎将其作为一个整体应用于每个矩阵(即每个矩阵变成单个 NA 值)。
l_na <- lapply(l, function(x) x[(x >= 11)] <- NA)
我显然误解了 lapply。我将不胜感激解决方案和我在这里出错的任何指示。
这个有效
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
添加为 return 值是一种选择。不知道还有没有。
我们可以使用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))
我有一个矩阵列表(玩具示例):
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
但试图lapply 相同的函数似乎将其作为一个整体应用于每个矩阵(即每个矩阵变成单个 NA 值)。
l_na <- lapply(l, function(x) x[(x >= 11)] <- NA)
我显然误解了 lapply。我将不胜感激解决方案和我在这里出错的任何指示。
这个有效
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
添加为 return 值是一种选择。不知道还有没有。
我们可以使用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))