【问题标题】:Check if vector of strings contains words created from two others words检查字符串向量是否包含由其他两个单词创建的单词
【发布时间】:2019-04-09 05:34:18
【问题描述】:

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

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

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

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


@quant 在 cmets 中提供的上下文:

作为没有生物学背景的每个人的说明。

肽是大分子。我们的身体可以通过将不同的氨基酸“粘合”在一起来组成这些大分子。粘合在一起的氨基酸序列称为肽的一级结构,在生物信息学中,通常使用单字母代码(参见rpeptide.com)来表示一级结构。

所以AHMESDK简单来说就是由丙氨酸、组氨酸等组成的肽。

【问题讨论】:

  • 您能否包括您已经尝试过的对grepl 的调用?不知道你在这里的意思。搜索AHMESDK 不意味着AHMESDK 连接在一起吗?
  • 请提供可重现的示例预期输出。不是很清楚。

标签: r regex vector bioinformatics


【解决方案1】:

数据:

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" 

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

peplist[sapply(peplist,length)>1]

方法2:

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

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

【讨论】:

  • 方法 1 效果很好,谢谢!方法 2 对我来说非常好,但我尝试将它用于向量 6000+ 长度,它计算的有点长,我不确定是否适合 1kk+ 长度的向量。我想方法 2 不能做得更快,对吧?
  • 对于方法二,问题可能是内存储备。您可以通过将 pepcomb 分解为许多较小的向量,然后循环它们来解决它。
猜你喜欢
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
相关资源
最近更新 更多