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

如何在R中不使用apply或循环,按向量元素及位置提取矩阵值?

R语言一步提取矩阵对应位置元素的方法

我有如下定义的R语言矩阵prob.matx:

prob.matx <- structure(c(0.182, 0.212, 0.364, 0.242, 0.242, 0.152, 0.394, 
                         0.212, 0.364, 0.091, 0.273, 0.273, 0.333, 0.242, 0.364, 0.061, 
                         0.273, 0.333, 0.212, 0.182, 0.303, 0.333, 0.182, 0.182), 
                       dim = c(4L, 6L), 
                       dimnames = list(c("A", "C", "G", "T"), 
                                       c("V1", "V2", "V3", "V4", "V5", "V6")))

矩阵展示形式:

V1    V2    V3    V4    V5    V6
A 0.182 0.242 0.364 0.333 0.273 0.303
C 0.212 0.152 0.091 0.242 0.333 0.333
G 0.364 0.394 0.273 0.364 0.212 0.182
T 0.242 0.212 0.273 0.061 0.182 0.182

同时有一个DNA向量:

DNA <- c("A", "C", "C", "C", "C", "A")

需要提取prob.matx中对应位置的元素:即prob.matx[DNA[1],1]、prob.matx[DNA[2],2]……prob.matx[DNA[6],6],预期结果为:

[1] 0.182 0.152 0.091 0.242 0.333 0.303

要求无需使用apply或循环,一步实现。


解决方案

直接利用R语言矩阵的索引特性,通过cbind构造行列索引对,一步提取目标元素:

prob.matx[cbind(DNA, seq_along(DNA))]

运行后直接得到预期结果:

[1] 0.182 0.152 0.091 0.242 0.333 0.303

原理说明

cbind(DNA, seq_along(DNA))会生成一个2列的索引矩阵,每一行对应一个待提取元素的行、列位置。R语言的矩阵支持这种矩阵形式的索引输入,会直接返回所有对应位置的元素组成的向量,完全不需要循环或apply系列函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:55:29