我有以下矩阵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")

我想根据DNA向量中的元素和位置提取矩阵值,并返回一个向量.即:

c(prob.matx[DNA[1], 1], prob.matx[DNA[2], 2], prob.matx[DNA[3], 3], 
  prob.matx[DNA[4], 4], prob.matx[DNA[5], 5], prob.matx[DNA[6], 6])

[1] 0.182 0.152 0.091 0.242 0.333 0.303

这看起来很简单,但我很难找到一个简单的函数来使用apply或for循环来完成WITHOUT.

推荐答案

我认为@Darren's answer在效率方面已经足够好了(除非你对速度有极端的要求).基于@Darren的解决方案,我们实际上可以做一些不同的事情来提高速度.


让我们想得更远,更努力

prob.matx <- matrix(rnorm(26 * 1000), 26, 10000, dimnames = list(LETTERS, paste0("V", 1:10000)))
DNA <- sample(LETTERS, 100000, replace = TRUE)

bench::mark(
  "Darren" = prob.matx[cbind(DNA, colnames(prob.matx))],
  "TIC" = prob.matx[cbind(match(DNA, row.names(prob.matx)), 1:ncol(prob.matx))]
)

我们将会看到

# A tibble: 2 × 13
  expression      min  median itr/s…¹ mem_a…² gc/se…³ n_itr  n_gc total…⁴ result
  <bch:expr> <bch:tm> <bch:t>   <dbl> <bch:b>   <dbl> <int> <dbl> <bch:t> <list>
1 Darren       4.14ms  4.57ms    207.  6.69MB    19.3    86     8   415ms <dbl>
2 TIC           1.5ms     2ms    502.  3.09MB    18.9   213     8   424ms <dbl>

R相关问答推荐

保存shiny 的代码嗅探器:避免$ Symbol问题

在ggplot的注释表格中突出显示最大值

将年度数据插入月度数据

gt()从gt为相同内容的单元格 colored颜色 不同?

在for循环中转换rabrame

删除具有相同标题的tabPanel(shinly)

如果可能,将数字列转换为整数,否则保留为数字

如何在分组条形图中移动相关列?

R中的哈密顿滤波

如何从容器函数中提取conf并添加到ggplot2中?

跨列查找多个时间报告

KM估计的差异:SvyKm与带权重的调查

根据纬度和距离连接两个数据集

自动STAT_SUMMARY统计与手动标准误差之间的差异

'使用`purrr::pwalk`从嵌套的嵌套框架中的列表列保存ggplots时出现未使用的参数错误

随机 Select 的非NA列的行均数

为什么将负值向量提升到分数次方会得到NaN

如何获取R chromote中的当前URL?

使用卡环从R中的列中删除单位(&C)

从data.table列表中提取特定组值,并在R中作为向量返回