.attrs и повторяющиеся записи в списке R
Я пытаюсь получить некоторую информацию из NCBI, используя этот скрипт 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, и как мне понять эти данные? Я не знаю, как вы можете иметь две записи с одним именем в одном списке.
1 ответ
В R attributes
а также attr
являются функциями, которые назначают или извлекают атрибуты, но, насколько я могу судить, `.attr '- это просто имя расположения списка. Смысл этого по сути то, что авторы думали, что это должно означать... после этого ваш код прошел через синтаксический анализ XML и преобразование его в список R. Это не часть определения R, так что читайте документацию.
Теперь я вижу, что вас беспокоят элементы списка с одинаковыми именами. Это то, что возможно в R. "" "и"[["будут извлекать первый элемент в дереве, который соответствует имени. Доступ должен быть числовым или опосредованным посредством lapply или sapply - функций, которые пересекают верхний уровень дерева, чтобы избежать двусмысленности.
> 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
(Я также не вижу, чтобы какое-либо из этих определений функций использовалось в процессе извлечения и обработки этих данных.)