J'ai une longue liste e2i, qui « cartes » rownames aux valeurs, et a double rownames:Comment convertir une liste avec des noms de scène non uniques en une liste (imbriquée) avec des noms uniques?
> head(e2i)
$`679594`
[1] "IPR019956"
$`679594`
[1] "IPR019954"
$`679594`
[1] "IPR019955"
$`679594`
[1] "IPR000626"
$`682397`
[1] "IPR019956"
$`682397`
[1] "IPR019954"
j'ai besoin de le convertir en une liste avec rownames unique, où chaque élément nommé serait une liste de (avec ou sans nom) valeurs:
> str(mylist)
List of 2
$ 679594:List of 3
..$ : chr "IPR019956"
..$ : chr "IPR019954"
..$ : chr "IPR019955"
$ 682397:List of 2
..$ : chr "IPR019956"
..$ : chr "IPR019954"
Je crois qu'il existe une solution courte et élégante.
Comme pour longtemps et solution laid - je pense que je pourrais le faire avec une boucle comme ceci:
mytest = function(e2i) {
result = list()
for (e in names(e2i)) {
# iterate all rownames, including duplicates
if (e %in% names(result)) {
# convert existing element to a list (if not already a list),
# then append new value e2i[[e]] to that nested list
}
else {
# just add the value to the result
result = c(result, e2i[[e]])
}
}
return(result)
}
Au départ, les données étaient dans une matrice, et pour mon projet de solution de boucle au-dessus j'utiliser comme entrée:
> head(entrez2interpro_matrix)
EntrezGene.ID Interpro.ID
1 679594 IPR019956
2 679594 IPR019954
3 679594 IPR019955
4 679594 IPR000626
5 682397 IPR019956
6 682397 IPR019954
Merci, je l'ai utilisé Défaire() - une liste de vecteurs adaptés à mes besoins ainsi qu'une liste des listes seraient. – chronos