R语言矩阵查询不存在列名时如何返回NA而非下标越界错误
解决方法
你可以通过match函数先匹配目标列名在矩阵列名中的位置,匹配不到的列名会返回NA,用返回的位置向量索引矩阵即可得到预期结果,不存在的列会自动填充NA不会抛出越界错误。
代码示例
你定义的矩阵列名为c("16","17","18","19"),执行以下代码即可完成查询:
# 先匹配列名位置,不存在的返回NA col_pos <- match(c("16", "1"), colnames(Mat)) # 索引矩阵,加drop=FALSE避免单查询列时退化为向量 res <- Mat[, col_pos, drop = FALSE] # 给结果设置为你查询的列名,便于识别 colnames(res) <- c("16", "1")
输出结果如下:
16 1 1 1 NA 2 2 NA 3 3 NA 4 4 NA
封装为复用函数
如果经常需要类似查询,可以封装为自定义函数直接调用:
get_matrix_cols <- function(mat, query_cols) { col_pos <- match(query_cols, colnames(mat)) res <- mat[, col_pos, drop = FALSE] colnames(res) <- query_cols return(res) } # 调用示例 get_matrix_cols(Mat, c("16", "1"))
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

