在单条蛋白质序列中批量查找多个肽段的起止位置。 对未匹配的肽段返回 NA 而非报错,适合大规模蛋白质组学数据处理。

find_peptide_pos(peptides, protein_seq)

Arguments

peptides

字符向量。待查找的肽段序列,例如 c("AAPPL", "SKAEYLK")

protein_seq

字符串。目标蛋白质序列,例如 "MAAAAPPLSKAEYLK"

Value

一个 data.table,包含以下三列:

peptide

字符型。输入的肽段序列。

start

整数型。肽段在蛋白质中的起始位置(1-based);未匹配时为 NA

end

整数型。肽段在蛋白质中的终止位置(1-based);未匹配时为 NA

若一个肽段在蛋白质中出现多次,则每次匹配各占一行。

Details

函数内部流程:

  1. 将蛋白质序列转换为 Biostrings::AAString 对象

  2. 将所有肽段转换为 Biostrings::AAStringSet 对象

  3. 对每个肽段调用 Biostrings::matchPattern(C 底层实现)进行精确匹配

  4. 使用 data.table::rbindlist 合并结果(优于 do.call(rbind)

所有外部函数均通过 :: 显式调用,无需在 NAMESPACE 中声明 importFrom, 仅需在 DESCRIPTIONSuggestsImports 字段中列出依赖包即可。

注意事项:

  • 匹配区分大小写,输入序列须为标准单字母氨基酸编码(大写)

  • 不支持含修饰标注的序列(如 "AAC(UniMod:4)K"),请预先清洗

  • 函数每次只处理一条蛋白质序列;多蛋白场景请在外部循环调用

See also

matchPattern 底层匹配函数

Examples

protein <- "MAAAAPPLSKAEYLKGKR"

peptides <- c(
  "AAPPL",      # 正常匹配
  "SKAEYLK",    # 正常匹配
  "ZZZZZ",      # 不存在,返回 NA
  "GKR"         # 正常匹配
)

find_peptide_pos(peptides, protein)
#>    peptide start   end
#>     <char> <int> <int>
#> 1:   AAPPL     4     8
#> 2: SKAEYLK     9    15
#> 3:   ZZZZZ    NA    NA
#> 4:     GKR    16    18
#>    peptide start end
#> 1:   AAPPL     3   7
#> 2: SKAEYLK     9  15
#> 3:   ZZZZZ    NA  NA
#> 4:     GKR    16  18

# 多蛋白场景:在外部循环调用
protein_list <- c(prot1 = "MAAAAPPLSK", prot2 = "MGKRSKAEYLK")

result <- do.call(rbind, lapply(names(protein_list), function(pid) {
  df <- find_peptide_pos(peptides, protein_list[[pid]])
  df$protein <- pid
  df
}))