【问题标题】:how to see if any element of a list contains only a certain value in R如何查看列表的任何元素是否仅包含R中的某个值
【发布时间】:2021-09-28 09:29:23
【问题描述】:
我有一个包含许多矩阵的列表,比如说 my_list。我想检查这些矩阵中的任何一个是否只有零作为其元素,如果是,该列表中的哪个矩阵有这种情况。
library(R.utils)
output_vec <- vector()
for(i in 1:length(my_list)){
asZero(as.vector(my_list[[i]]))}
这给了我真正的错误,但是我无法返回所有零元素的矩阵索引。我很感激这方面的任何帮助。
【问题讨论】:
标签:
r
list
loops
if-statement
matrix
【解决方案1】:
我们可能需要用all 换行 - 用sapply 循环矩阵的list,创建一个逻辑表达式 (x == 0),用all 换行以返回单个 TRUE/FALSE - 如果除 NA (na.rm = TRUE) 之外的所有值均为 0,这将返回 TRUE 或 FALSe
sapply(my_list, function(x) all(x == 0, na.rm = TRUE))
【解决方案2】:
您可以使用norm判断矩阵中的所有条目是否为零,例如,
sapply(my_list, norm) == 0
因为矩阵的范数是0 当且仅当所有值都为零。
示例
> my_list
[[1]]
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
[3,] 0 0 0
[[2]]
[,1] [,2]
[1,] 1 1
[2,] 0 0
> sapply(my_list, norm) == 0
[1] TRUE FALSE