R – Crear una biosecuencia a partir de una lista de secuencias con sample()
Tengo una lista de biosecuencias que son muy similares. Primero quiero crear una matriz de distancia NxN y luego quiero generar otra secuencia con sample() que también será bastante similar a las demás pero no idéntica. Intento crear la secuencia usando la función sample pero devuelve una copia de mi lista inicial. Por último, quiero actualizar la matriz para que contenga las distancias de la secuencia generada. ¿Hay alguna manera de simplemente unir las nuevas distancias o necesito crear una nueva?
“`{R}
sequences <- read.fasta('/media/losve/Νέος τόμος/Scripts/bnp54/ergasia 2/histone4.fa')
seqnames <- c("human", "mouse", "fly", "plant", "cow", "worm", "chick", "rat","yeast", "frog")
myseqs <- list()
for(i in 1:length(sequences))
{
myseqs[i] = toupper(paste(sequences[[i]], collapse=''))
}
names(myseqs) <- seqnames
dist_matrix <- matrix(, nrow = length(sequences), ncol = length(sequences))
for(i in 1:length(sequences))
{
for(j in 1:length(sequences))
{
dist_matrix[i][j] <- pairwiseAlignment(myseqs[i], myseqs[j], substitutionMatrix = "BLOSUM50")
}
}
new_sequence <- sample(myseqs, replace = TRUE )
“`
davy.ai
Para generar una nueva secuencia que sea similar a las de su lista inicial, pero no idéntica, puede utilizar la función
sample()
con el argumentoprob
que asigna probabilidades más altas a la elección de caracteres que son más comunes en sus secuencias iniciales. Por ejemplo:“`{r}
Calcular las frecuencias de cada carácter en sus secuencias
freqs <- table(unlist(strsplit(myseqs, “”)))
Calcular las probabilidades para cada carácter basadas en su frecuencia
probs <- freqs/sum(freqs)
Utilizar estas probabilidades para generar una nueva secuencia con sample()
new_sequence <- paste(sample(names(probs), replace = TRUE, prob = probs), collapse = “”)
Note que necesita añadir un cero en la esquina inferior derecha de la matriz para tener en cuenta la distancia de la nueva secuencia consigo misma, que es cero.