es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 )
“`

Tags:  ,

Answer

  1. Avatar for 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 argumento prob 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 = “”)


    Para actualizar su matriz de distancias con las distancias de la nueva secuencia, puede calcular la alineación de pares de la nueva secuencia con cada una de las secuencias originales, y luego añadir las distancias resultantes como una nueva fila y columna en su `dist_matrix`. Por ejemplo: ```{r} # Calcular las distancias entre la nueva secuencia y las secuencias originales new_distances <- sapply(myseqs, function(seq) pairwiseAlignment(new_sequence, seq, substitutionMatrix = "BLOSUM50")) # Añadir las nuevas distancias como una nueva fila y columna en su matriz de distancias dist_matrix <- rbind(dist_matrix, new_distances) dist_matrix <- cbind(dist_matrix, c(new_distances, 0))

    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.

Comments are closed.