【问题标题】:Simple codon-to-amino acid hash in RR中的简单密码子到氨基酸哈希
【发布时间】:2017-08-16 14:25:48
【问题描述】:

我想创建一个 R 脚本,其中我有一个哈希表,我可以查找密码子并获取其相关氨基酸。例如,

library(hash)

hashTable <- hash(...) #insert all codon-to-amino acid pairs
hashTable['TTT']

会回来

[1] Phe

有人知道我会怎么做吗?或者也许是一个包(Bioconductor?)我可以安装它会使这更容易?

【问题讨论】:

  • 您是否有理由尝试使用 has 表来实现这一点? iirc没有那么多氨基酸,密码子对。您是否只想查看您输入密码子并取回相关氨基酸的表格?
  • @AronBoettcher 我只是认为这是有道理的......作为密码子的键和作为氨基酸的值。但是,是的,这就是我想要的。
  • 使用带有名称-值对的字符向量进行向量化查找非常容易。 myhash
  • 我的意思是,我们在这里没有迭代超过 10^14 长的向量。当 R 本身不支持哈希表时,无需使用哈希表。考虑到我们试图找到的东西很少,即使在这个例子中调用一个库也有点荒谬。 grep() 在列表上做得很好。我编写一个函数所花费的时间比我找到一个具有类似函数的库所花费的时间要少。
  • 我认为,如果你研究 R 的命名向量查找算法的基础,你会发现它是散列的。

标签: r hash bioinformatics bioconductor


【解决方案1】:

几乎可以肯定,这个问题已经存在解决方案。一种可能性是 Bioconductor 的 Biostrings例如

library(Biostrings)
GENETIC_CODE[["ATG"]]
[1] "M"

【讨论】:

    【解决方案2】:

    因为为什么要使用哈希表?

    acidLookup<-function(x){
      acids<-c("Isoleucine","Leucine","Valine","Phenylalanine","Methionine","Cysteine","Alanine","Glycine","Proline","Threonine","Serine",
             "Tyrosine","Tryptophan","Glutamine","Asparagine","Histidine","Glutamic acid","Aspartic acid","Lysine","Arginine","Stop codons")
      slc<-c("I","L","V","F","M","C","A","G","P","T","S","Y","W","Q","N","H","E","D","K","R","Stop")
      codon<-c("ATT, ATC, ATA","CTT, CTC, CTA, CTG, TTA, TTG","GTT, GTC, GTA, GTG","TTT, TTC","ATG","TGT, TGC",
             "GCT, GCC, GCA, GCG","GGT, GGC, GGA, GGG","CCT, CCC, CCA, CCG","ACT, ACC, ACA, ACG","TCT, TCC, TCA, TCG, AGT, AGC",
             "TAT, TAC","TGG","CAA, CAG","AAT, AAC","CAT, CAC","GAA, GAG","GAT, GAC","AAA, AAG","CGT, CGC, CGA, CGG, AGA, AGG","TAA, TAG, TGA")
    
      codon.list<-strsplit(codon,",")
    
      data.frame(acid=acids[grep(x,codon.list)],slc=slc[grep(x,codon.list)],codons=codon[grep(x,codon.list)])
    }
    
    acidLookup("ATA")
    
            acid slc        codons
    1 Isoleucine   I ATT, ATC, ATA
    

    【讨论】:

    • 另外,我刚刚抓取了一些 Rando 网站的氨基酸/密码子配对。请您检查它们是否正确。
    【解决方案3】:

    无需使用特定的哈希表实现。如果Biostrings 不够用,基本 R 的向量/列表中使用的标准 names 表示法应该可以工作:

    aaCodes <- character(0);
    aaCodes["ATG"] <- "Ile";
    aaCodes["UGA"] <- "Trp";
    aaCodes[c("CTC","AGG")] <- c("Leu","Ser");
    
    > names(aaCodes)
    [1] "ATG" "UGA" "CTC" "AGG"
    
    > aaCodes[c("ATG","ATG","CTC","UGA")]
      ATG   ATG   CTC   UGA
    "Ile" "Ile" "Leu" "Trp"
    
    > substring("ATGATGCTCUGA",0:3*3+1,0:3*3+3)
    [1] "ATG" "ATG" "CTC" "UGA"
    
    > aaCodes[substring("ATGATGCTCUGA",0:3*3+1,0:3*3+3)]
      ATG   ATG   CTC   UGA 
    "Ile" "Ile" "Leu" "Trp" 
    

    这不会显示用于每个字符串的 R 的内部散列值,但似乎这个问题并不要求这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 2013-11-26
      • 1970-01-01
      • 2017-12-01
      • 2020-12-08
      • 2014-03-28
      • 2017-09-29
      • 2021-06-01
      相关资源
      最近更新 更多