You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让单行矩阵按列取子集时返回带行名的向量?

解决单行矩阵按列取子集保留行名的问题

先看你的示例矩阵:

lil_matrix <- matrix(data = 1:4,
                  nrow = 2,
                  dimnames = list(c("Row1", "Row2"),
                                  c("Col1", "Col2")))

正常多行列矩阵按列取子集(lil_matrix[,1])会返回带行名的向量,但单行矩阵(比如lil_matrix[1, , drop = FALSE])按列取子集时,默认返回的向量会丢失行名。要高效实现保留行名的需求,有几种简洁的方法:

方法1:先存单行矩阵再赋值行名

先把单行矩阵存入变量,避免重复计算,然后给结果向量添加行名:

# 先获取单行矩阵
single_row <- lil_matrix[1, , drop = FALSE]
# 取列子集并添加行名
named_vec <- single_row[,1]
names(named_vec) <- rownames(single_row)

这种方法清晰直观,且因为只生成一次单行矩阵,效率较高。

方法2:用c()转换单行单列矩阵(最高效)

直接取单行单列的矩阵(保留维度),再用c()转换为向量,c()会自动保留原矩阵的行名作为向量名称:

named_vec <- c(lil_matrix[1, 1, drop = FALSE])

这个操作完全基于基础R的原生函数,没有额外开销,是效率最高的方案。测试结果如下:

> named_vec
Row1 
    1 

完全符合需求。

方法3:用setNames一步完成

如果不想拆分步骤,可以用setNames直接给结果向量绑定行名,注意只生成一次单行矩阵来提升效率:

single_row <- lil_matrix[1, , drop = FALSE]
named_vec <- setNames(single_row[,1], rownames(single_row))

内容的提问来源于stack exchange,提问作者nateroe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:37:40