在单条蛋白质序列中批量查找多个肽段的起止位置。
对未匹配的肽段返回 NA 而非报错,适合大规模蛋白质组学数据处理。
find_peptide_pos(peptides, protein_seq)一个 data.table,包含以下三列:
peptide字符型。输入的肽段序列。
start整数型。肽段在蛋白质中的起始位置(1-based);未匹配时为 NA。
end整数型。肽段在蛋白质中的终止位置(1-based);未匹配时为 NA。
若一个肽段在蛋白质中出现多次,则每次匹配各占一行。
函数内部流程:
将蛋白质序列转换为 Biostrings::AAString 对象
将所有肽段转换为 Biostrings::AAStringSet 对象
对每个肽段调用 Biostrings::matchPattern(C 底层实现)进行精确匹配
使用 data.table::rbindlist 合并结果(优于 do.call(rbind))
所有外部函数均通过 :: 显式调用,无需在 NAMESPACE 中声明 importFrom,
仅需在 DESCRIPTION 的 Suggests 或 Imports 字段中列出依赖包即可。
注意事项:
匹配区分大小写,输入序列须为标准单字母氨基酸编码(大写)
不支持含修饰标注的序列(如 "AAC(UniMod:4)K"),请预先清洗
函数每次只处理一条蛋白质序列;多蛋白场景请在外部循环调用
matchPattern 底层匹配函数
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
}))