如何通过索引向量获取行列名为数字的矩阵元素(无需单独访问元素)
问题:通过向量索引获取矩阵元素(数字命名维度的困扰)
之前发布过类似简化问题但未解决实际需求,当前核心困扰是矩阵的行、列名称使用数字时,索引操作容易出错。
示例代码
m <- matrix(1:25, ncol = 5, dimnames = list(c(1, 10, 100, 1000, 10000), c(1, 10, 100, 1000, 10000))) v <- c(10,100)
想要将向量v解析为坐标,获取矩阵元素m[10,100](对应值为12),但直接执行以下代码会报错:
m[v] m[10,100]
错误信息:
Error in m[10,100] : subscript out of bounds
只有将索引转为字符串形式才能正常获取:
m[paste(v[1]), paste(v[2])] m["10","100"]
请问如何将向量解析为坐标,且无需单独访问向量的单个元素(如v[1]、v[2])?
解决方法
方法1:用do.call传递参数列表
do.call(`[`, c(list(m), as.list(as.character(v))))
把向量v转为字符型后拆成列表,和矩阵m一起作为参数传给[函数,自动将v的两个元素分别作为行、列名称索引。
方法2:构造字符矩阵进行索引
m[matrix(as.character(v), nrow = 1)]
将字符化后的v构造成1行2列的矩阵,矩阵索引会自动匹配对应的行、列名称。
报错原因说明
直接使用数字10、100时,R默认按位置索引处理(即找第10行、第100列),但矩阵只有5行5列,超出范围因此报错;转为字符串后,R才会匹配维度的名称进行索引。
内容的提问来源于stack exchange,提问作者SchlaWiener
相关产品推荐
相关产品推荐

