检查字符串向量是否包含由另外两个词创建的词

Check if vector of strings contains words created from two others words

我有非常非常长的字符串(肽)向量。

head(unique(pseq_list))
#[1] "GPPNHHMGPMSER"  "SLSGQCHHHGENLR" "HSSGQDKPHETYR"    
#"DHDKPHQQSDK"    "AHMESDK"        "HISESHEK"  

我想检查这个载体中是否有由另外两个肽产生的肽。例如,如果有 "AHMESDK""AHME""SDK",我想知道。我尝试了 grepl 函数,但可能我的矢量是长(?)。另外,如何保存这样的结果?

如果很难验证是否存在 "AHMESDK" = "AHME" + "SDK",那么至少知道载体中是否包含其他肽(例如 "HISESHEK""SES").


上下文由 @quant 在评论中提供:

As a note for everyone without biological background.

Peptides are macromolecules. Our body can compose these macromolecules by "gluing" different amino acids together. The sequence of amino acids glued together is called the primary structure of a peptide and in bioinformatics often the one letter code, see rpeptide.com is used in order to represent the primary structure.

So AHMESDK simply means a peptide composed of Alanin, Histidine and so on.

数据:

pseq<-c("GPPNHHMGPMSER", "SLSGQCHHHGENLR", "HSSGQDKPHETYR", "DHDKPHQQSDK", "AHMESDK", "AHME", "SES", "HISESHEK")

两种方法:

方法一:

peplist<-sapply(pseq,grep, pseq, value=TRUE)

结果:

$GPPNHHMGPMSER
[1] "GPPNHHMGPMSER"

$SLSGQCHHHGENLR
[1] "SLSGQCHHHGENLR"

$HSSGQDKPHETYR
[1] "HSSGQDKPHETYR"

$DHDKPHQQSDK
[1] "DHDKPHQQSDK"

$AHMESDK
[1] "AHMESDK"

$AHME
[1] "AHMESDK" "AHME"   

$SES
[1] "SES"      "HISESHEK"

$HISESHEK
[1] "HISESHEK" 

这为您提供了一个列表,其中对于每个元素,您都可以获得它所在的元素列表。然后我们可以创建一个仅包含出现在其他肽中的那些肽的列表:

peplist[sapply(peplist,length)>1]

方法二:

pepcombs<-expand.grid(pseq,pseq) %>%
  apply(1,paste0,collapse="")
pseq[pseq %in% pepcombs]

这将为您提供可通过组合其他两种肽构建的肽列表。