识别数组中的最大分数

Identifying maximised score across an array

我有一个包含 569 个氨基酸残基的序列,每个残基都有一个分数。我想确定一个由 10 个这样的氨基酸组成的连续序列,以使得分最大化。有没有一种优雅的方式可以做到这一点?

amino_acids <- structure(
    list(
        Position=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20),
        Residue=c("M", "S", "A", "S", "K", "E", "V", "K", "S", "F", "L", "W", "T", "Q", "S", "L", "R", "R", "E", "L"),
        `Bepipred Score`=c(0.565, 0.709, 0.512, 0.516, 0.451, 0.291, -0.11, -0.409, -0.525, -0.548, -0.611, -0.795, -0.825, -0.864, -0.47, -0.387, 0.024, -0.044, -0.209, -0.309)
    ),
    row.names=c(NA, -20L),
    class=c("tbl_df", "tbl", "data.frame"))

这是第20个数据结构的例子。在这种情况下,序列 1-10 将是 'best',然后是 2-11,然后是 3-12 等等。

我已经能够通过将数据框分成 10 个氨基酸单位并计算平均值来做类似的事情,但它很笨拙。

您可以使用简单移动平均线,通常用于时间序列分析。一种方式是:

library(magrittr) ## just for %>% operator
n <- 10
seq <- amino_acids$`Bepipred Score` %>% TTR::SMA(.,n=n) %>% na.omit()

这里我们计算了移动平均值,并省略了前 n-1 个值,因为它们是 NA。 (您必须至少有 n 个值才能计算平均值)

seq
[1]  0.1452  0.0276 -0.1228 -0.2565 -0.3945 -0.4866 -0.5544 -0.5410 -0.5045 -0.4729 -0.4490

然后我们简单地检查哪个是最高的,

## best indexes
(which.max(seq)):(which.max(seq) + n - 1)
[1] 1:10