2015-04-08 4 views
1

Я пытаюсь извлечь некоторую информацию из базы данных NCBI с помощью этого R сценария:.attrs и повторяющиеся записи в списке R

require(rentrez) 
require(magrittr) 
rs = "rs16891982" 
rss = c("rs16891982", "rs12203592", "rs1408799", "rs10756819", "rs35264875", "rs1393350", "rs12821256", "rs17128291", "rs1800407", "rs12913832", "rs1805008", "rs4911414") 
# given a rs number, return chr, bp, allele and gene name 
annotateGeneName = function(rs) { 
    anno = rentrez::entrez_search(db = "snp", term = rs) %>% 
      "[["("ids")         %>% 
      rentrez::entrez_summary(db = "snp", id = .) 
      if(length(anno) < 1) { 
       warning(sprintf("%s not found in dbSNP!", rs)) 
       return(invisible(NULL)) 
      } 
      # there might be multiple entries 
      # if "snp_id" is not in the list, then 
      # it means multiple SNPs have been return for this search 
      # just take the first hit 
      if(! "snp_id" %in% names(anno)) { 
       anno = anno[[1]] 
      } 
    chrpos = anno[["chrpos"]] 
    EA  = anno$allele_origin %>% gsub("\\(.*", "", .) 
    fEA = anno$global_maf %>% gsub("/.*", "", .) %>% gsub("^.*=", "", .) 
    genes = dplyr::first(anno$genes, default = NA) 
    res = data.frame(snp = rs, chrpos = chrpos, EA = EA, fEA = fEA, genes = genes) 
    res 
} 
annotateGeneNames = function(rss) { 
    do.call(rbind, lapply(rss, annotateGeneName)) 
} 
ids = rentrez::entrez_search(db = "snp", term = rs) %>% "[["("ids") 
x = rentrez::entrez_fetch(db = "snp", id = ids[1], rettype="xml") 
snp1xml = xmlParse(x) 
snp1list = xmlToList(snp1xml) 
print(snp1list) 

При печати результата, вы можете увидеть такие вещи, как:

... 
$Rs$Sequence$.attrs 
    exemplarSs ancestralAllele 
    "285153617" "C,C,C,C,C,C" 


$Rs$Ss$.attrs 
     ssId  handle  batchId  locSnpId subSnpClass  orient 
    "23456916" "PERLEGEN"  "12309" "afd3693051"  "snp" "forward" 
     strand  molType  buildId methodClass validated 
    "bottom" "genomic"  "123" "hybridize" "by-cluster" 


$Rs$Ss$.attrs 
          ssId       handle 
        "28510204"    "MGC_GENOME_DIFF" 
         batchId      locSnpId 
         "12314" "BC064405x37550355-C16403799G" 
        subSnpClass       orient 
         "snp"      "forward" 
         strand      molType 
         "bottom"       "cDNA" 
         buildId     methodClass 
         "126"      "computed" 


$Rs$Ss 
$Rs$Ss$Sequence 
$Rs$Ss$Sequence$Seq5 
[1] "TTCCCTTTCATTTTCCAGAGAAACTTGATCAGGAACCCACTGATTCCAAGAGCAAAGTAATCAGTGAGGAAATGACACCTAGAATTCATGATGAAAAAAGGATGCTTTATATGGTCCTTTTTAAGGTGATAGTTTTTCCTGACGTCCATAGATTTATTAAGAATCTGGTATTTTAAACAGTAGGAAATACACATAGAAATATCAAATCCAAGTTGTGCTAGACCAGAAACTTTTAGAAGACATCCTTAGGAGAGAGAAAGACTTACAAGAATAAAGTGAGGAAAACACGGAGTTGATGCA" 

$Rs$Ss$.attrs 

$Rs$Ss$Sequence 
$Rs$Ss$Sequence$Seq5 
[1] "AAGACATCCTTAGGAGAGAGAAAGACTTACAAGAATAAAGTGAGGAAAACACGGAGTTGATGCA" 

$Rs$Assembly$Component$MapLoc$FxnSet 
     geneId  symbol  mrnaAcc  mrnaVer  protAcc  protVer 
    "51151" "SLC45A2" "NM_016180"   "4" "NP_057264"   "3" 
    fxnClass readingFrame  allele  residue aaPosition 
"reference"   "3"   "C"   "F"  "373" 

$Rs$Assembly$Component$MapLoc$FxnSet 
       geneId     symbol    mrnaAcc 
       "51151"    "SLC45A2"   "NM_016180" 
       mrnaVer    protAcc    protVer 
        "4"   "NP_057264"     "3" 
       fxnClass   readingFrame     allele 
      "missense"     "3"     "G" 
       residue    aaPosition     soTerm 
        "L"     "373" "non_synonymous_codon" 

В этом списке много записей .attrs, и они часто повторяются. Есть и другие повторяющиеся записи, такие как:

$Rs$Ss$Sequence$Seq5 
$Rs$Assembly$Component$MapLoc$FxnSet 

т.д.

Что .attrs значит, и как мне сделать смысл этих данных? Я не знаю, как вы можете иметь две записи одного и того же имени в одном списке.

ответ

2

В R attributes и attr - это функции, которые присваивают или извлекают атрибуты, но насколько я могу сказать, `. .attr '- это просто имя местоположения списка. Смысл этого в том, что, по мнению авторов, это должно означать ... после этого ваш код прошел через разбор XML и преобразование его в список R. Это не является частью определения R, поэтому прочтите документацию.

Теперь я вижу, что вас беспокоят элементы списка, имеющие одинаковые имена. Это возможно в R. «[» и «[[» будут извлекать первый элемент в дереве, который соответствует имени. Доступ должен быть числовым или опосредуемым с помощью лаппеля или сочленения, функции, которые пересекают верхний уровень дерева, чтобы избежать двусмысленности.

> mylist=vector("list", length=2) 
> mylist 
[[1]] 
NULL 

[[2]] 
NULL 

> names(mylist) <- c("a","a") 
> mylist 
$a 
NULL 

$a 
NULL 

> mylist[['a']] 
NULL 
> mylist['a'] 
$a 
NULL 

> lapply(mylist , "[[", "a") 
$a 
NULL 

$a 
NULL 

(я не вижу, что одно из этих определений функций привыкают в процессе извлечения и обработки этих данных.)

+0

как вы получите две записи одного и то же имя в списке? – qed

+0

Можете ли вы уточнить? –

+0

См. Пример, который я написал в вопросе. Для другого простого примера, как вы можете иметь mylist $ a == 1 и mylist $ a == 2 одновременно? – qed

Смежные вопросы