Veuillez m'excuser par avance pour la question bien naïve à venir, je ne parviens cependant pas à trouver de réponse sur les forums ou les cours en ligne.
Je souhaite travailler sur un objet R de type list() qui consiste en un ensemble de tableaux comme le montre l'exemple ci-dessous :
Code : Tout sélectionner
$HGY10955
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
01 1 0.98 1 1 0.975 0.975 0.975 1 0.98333333 0.97368421 1 0.95
02 0 0.02 0 0 0.025 0.025 0.025 0 0.01666667 0.02631579 0 0.05
$HGY11092
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
01 0.05 0 0.1052632 0.125 0.1 0.08333333 0.025 0.05 0 0 0 0
02 0.95 1 0.8947368 0.875 0.9 0.91666667 0.975 0.95 1 1 1 1
$HGY11282
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
01 1 0.97727273 0.94736842 1 0.9 1 1 1 1 0.8947368 0.95652174 0.975
02 0 0.02272727 0.05263158 0 0.1 0 0 0 0 0.1052632 0.04347826 0.025
Pour info au cas où, il s'agit de fréquences alléliques pour plusieurs loci (chacun constituant un des tableaux) et pour plusieurs stations (colonnes des tableaux). Ces données ont été obtenues via la fonction readGenepop du package diveRsity de K. Keenan.
J'ai renommé chaque tableau de ma liste à l'aide des noms de mes différents loci. A présent,je voudrais effectuer la chose suivante :
Pour chaque tableau (donc chaque locus), je veux savoir si ce locus est bien polymorphe à 0.95 dans au moins une des 12 stations. Ceci revient donc à détecter les locis fixés, donc présent une fréquence allélique <=0.05 dans chaque station.
Pour l'instant, je cherche pour chaque locus à tester les fréquences des allèles : si, dans une des deux lignes du tableau, la valeur maximale de la ligne est inférieure à 0.05, alors l'allèle est trop rare pour que le locus soit considéré comme polymorphe. Je veux donc pouvoir récupérer le nom du tableau en question (le nom du locus) et le stocker dans une variable. J'ai voulu écrire une mini-fonction pour tester les lignes de mes tableaux, puis utiliser lapply pour appliquer cette fonction à chaque tableau de ma liste complète :
Code : Tout sélectionner
basic <- assign(paste("Info_", Code, sep = ""), readGenepop(infile="donnees.gen", gp=2)) # obtention des fréquences alléliques
names(basic$allele_freq) <- basic$loci_names # je renomme chaque tableau de la liste [i]basic$allele_freq[/i] avec les noms des loci
mono <- list() # Initialisation de ma liste de marqueurs monomorphes
n <- 0 # Initialisation d'un indice pour récupérer l'élément de la liste basic$allele_freq correspondant à un locus monomorphe
monomorphic <- function(e)
{
n <- n+1 # Incrémentation de l'indice
for(i in 1:nrow(e)) {
if(max(e[i,])<0.05) {
mono[[length(mono)+1]] <- names(basic$allele_freq[n]) # Ajout du nom du locus monomorphe dans ma variable [i]mono[/i].
}
}
}
lapply(basic$allele_freq, monomorphic)
Je sais que quelque chose cloche au niveau de la logique de ma fonction. "e" est sensé représenter un élément de la liste (donc un tableau) mais du coup je suppose que bien entendu R est perdu, puisque la fonction s'applique au tableau directement et non à ma liste... mais du coup je ne vois pas comment faire. Il y avait peut-être une manière plus simple de procéder pour récupérer (et éliminer) mes loci monomorphes, mais je n'ai toutefois pas vraiment trouvé de commande toute prête pour cela. De plus, ça me permet de m'entraîner :)
Je suis donc preneuse de tout conseil concernant l'écriture de fonctions, surtout pour ensuite les appliquer avec un lapply :) Vous remerciant par avance et vous souhaitant très bonne journée,
Chrystelle