删除列表中矩阵中的 NA 列会删除矩阵的列名

标签 r list matrix na names

我的代码如下:

mat1 <- matrix(1, nrow = 1, ncol = 2)
mat1[1,1] <- NA
colnames(mat1) <- c(NA, 'Name1')
mat2 <- mat1
mylist <- list(mat1, mat2)

mylist <-  lapply(mylist, function(x)  x[!is.na(colnames(x))])

如果我删除名称为 NA 的列,列名称 Name1 也会从矩阵中删除。如何删除 NA 列,但保留列表中矩阵剩余列的列名?

最佳答案

使用:

lapply(mylist, function(x)  x[, !is.na(colnames(x)), drop = FALSE])

#   [[1]]
#     Name1
#[1,]     1

#[[2]]
#     Name1
#[1,]     1

矩阵不同于数据框。对于矩阵,mat1[1] 返回矩阵的第一个值,而对于数据帧,mtcars[1] 返回第一列。要对矩阵中的列进行子集化,您始终需要一个前置逗号(mat[, i] 而不是 mat[i]),但对于数据帧而言并非总是如此。

关于删除列表中矩阵中的 NA 列会删除矩阵的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58090719/

相关文章:

python - 如何生成具有精确时刻的样本数据

python - 从元组列表中搜索元组索引

list - 等效代码,一个有效,另一个无效

javascript - 沿对 Angular 线遍历二维数组(矩阵)

delphi - 使用 R1 :=R2, 进行记录的深度复制或是否有好的方法可以使用记录实现 NxM 矩阵?

r - Sublime 3 不与 R 接口(interface)(尝试 R-box 和 REPL)

r - 使用自定义图像的 3D 散点图

r - str_replace_all 迭代地替换命名向量元素,而不是一次全部替换

html - 我对这些无序列表做错了什么?

c++ - 为什么我的 vector 不能正确旋转 OpenGL/GLM?