J'ai une liste de chaînes (séquence d'ADN), y compris a, t, c, g. Je souhaite trouver toutes les correspondances et insérer dans la table dont les colonnes sont toutes une combinaison possible de ces alphabet d'ADN (4 ^ k; "k" est la longueur de chaque match - k-mer - et doit être spécifié par l'utilisateur) et les lignes représentent le nombre de correspond à une séquence dans une liste.
permet de dire que ma liste comprend 5 membres: p> je veux définir Donc, ma table aura mon résultat souhaité: Pourriez-vous m'aider à mettre en œuvre cela dans R? p> p> k = 2 code> (2-mer) donc 4 ^ 2 = 16 code> Combinaison sont disponibles, y compris AA, AT, AC, AG, TA, TT, ... CODE> P> 5 rangées code> et 16 colonnes code>. Je veux compter le nombre de correspondances entre mes k-Mers et mes membres de la liste. p> df: code> p>
5 Réponses :
peut-être que cela aide ou comme suggéré par @arun, convertir la liste code> sur vecteur p> p> < Pré> xxx pré> p>
Vous devriez faire: oligonucléotidefrequency (dnastringset (x), 2l) code>, où x code> est ecriste (dnaliste) code> !!
@Arun merci, c'est mieux.
Ma réponse n'était pas aussi rapide que @bartektartanus. Cependant, il est également assez rapide et j'ai écrit le code ...: D
stri_count_fixed code> li>
- probablement
Stringi code> sera vraiment lent pour les gros k-mers car il
doit générer toutes les combinaisons possibles pour le modèle et ensuite,
Vérifiez leur existence dans les données et comptez combien de fois il apparaît. Li>
- Cela fonctionne également pour une longue
simple forte> et et plusieurs séquences fortes> avec
la même sortie vraiment rapide. li>
- Vous pouvez mettre une valeur pour
k code> au lieu de créer une chaîne de motif. li>
- Si vous exécutez
oligonucléotidefrequency code> avec un k code> plus grand que 12
Dans une grande séquence, la fonction gèle l'excès d'utilisation de la mémoire et
R est redémarré, tandis que ma fonction est assez rapide. Li>
ol> mon code h2> xxx pré> i Utilisez le package code> uniquement pour compter les bases ... Vous pouvez utiliser d'autres options comme Stringi Code> Pour compter ...
Si vous supprimez tout le code ci-dessous k_mers lapply code> et retour (k_mers) code> Il renvoie juste la liste ... de tous les k-mers avec les vecteurs répétés respectifs p> séquence code> Voici une séquence de 1000bp h3> xxx pré> tests effectués avec ma fonction: strong> p> #Slow 1 sequence 12-mers
> system.time({oligonucleotideFrequency(DNAString(sequence),12)})
user system elapsed
150.11 1.14 151.37
#Biostrings package freezes for a single sequence of 13-mers
> system.time({oligonucleotideFrequency(sequence,13)})
freezes, used all my 8gb RAM
Nous avons récemment publié notre forfait 'Kebabs' dans le cadre du bioconducteur 3.0 Libération. Bien que ce paquet vise à fournir des noyaux de séquence pour la classification, la régression et d'autres tâches telles que la similitude Clustering, le colis inclut une fonctionnalité pour calculer les fréquences K-MER efficacement, aussi:
#for the kebabs documentation please see:
browseVignettes("kebabs")
Merci de réponse explicite. une question sur la normalisation dans Spectrumkernel (K = 13, normalisée = true) code>; Est-ce que cela normalise l'obœurs ou les colonnes?
La normalisation du noyau est définie comme k '(x, y) = k (x, y) / sqrt (k (x, x) * k (y, y)). Dans le cas de la représentation explicite, cela correspond à la normalisation d'aspects en divisant chaque rangée par sa norme euclidienne. Si vous avez besoin de normalisation des colonnes, calculez la représentation explicite sans normalisation (comme dans ma réponse ci-dessus) et appliquez une échelle () à la matrice.
Une autre façon de faire ceci:
DNAlst<-list("CAAACTGATTTT","GATGAAAGTAAAATACCG","ATTATGC","TGGA","CGCGCATCAA","ACACACACACCA")
len <- 4
stri_sub_fun <- function(x) table(stri_sub(x,1:(stri_length(x)-len+1),length = len))
sapply(DNAlst, stri_sub_fun)
[[1]]
AAAC AACT ACTG ATTT CAAA CTGA GATT TGAT TTTT
1 1 1 1 1 1 1 1 1
[[2]]
AAAA AAAG AAAT AAGT AATA ACCG AGTA ATAC ATGA GAAA GATG GTAA TAAA TACC TGAA
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[[3]]
ATGC ATTA TATG TTAT
1 1 1 1
[[4]]
TGGA
1
[[5]]
ATCA CATC CGCA CGCG GCAT GCGC TCAA
1 1 1 1 1 1 1
[[6]]
ACAC ACCA CACA CACC
4 1 3 1
Ma base de données est énorme, alors l'efficacité est également importante ici. Merci.