[R-es] Fwd: if dentro de for
Hola Eso me recuerda a bioinformática y el diseño de primers, si estas en eso, R tiene muchos trabajos al respecto, para ahorrarle trabajo ¿no le sirve ninguno? Javier Marcuzzi
On Wednesday 06 March 2013 13:15:18 David Sanchez Rodriguez wrote:
Os reenvio mail que envie a Isidro de la lista,
Tal y como intuyes, estoy comenzando a programar en R, ya que estoy
programandoen java para estraer unos datos y posteriormente analizarlos con
R para generar graficas.
Antes he pasado el codigo completo de lo que quiero hacer (o es mi idea) y
el cual te pego de nuevo aqui abajo.
Me encuentro con un fichero llamado datos.fna el cual tiene virias filas,
en las que con una secuencia formada por estas cuatro letras A,C,T,G las
cuales aparecen de forma aleatoria y repetida.
Por ello, tengo que recorrer cada fila, y encontrar cuantas veces aparece
3, 4, 5, ... hasta 12 veces A, C T y G seguidas.
Es decir, tengo que buscar cuantas AAA tengo en todo el fichero.
Al mismo tiempo ver cuantas CCC TTT y GGG tengo.
Una vez que tengo eso, que lo voy guardando los resultaods en mi matriz,
pues paso a buscar cuantas veces tengo cuatros "A" es decir AAAA
La matrizgraf3 lo que representa, es en cada columna represento cada una de
las letras. En las filas represento cuantos elementos tengo en total del
tipo de la secuencia. Por ello, en mi primer elemento de la matriz, hace
referencia a cuantas veces tengo AAA dentro de mi fichero.
library("seqinr")
readseq <- read.fasta(file = "datos.fna")
numSeq3 <- length(readseq)
# Obtenemos la secuencia de valores que repiten 3 veces
# o más veces seguidas la misma secuencia.
# En nuestro caso tan solo queremos las AAA CCC GGG TTT
# Vamos a tener 9 filas, ya que analizamos desde cuando
# tenemos 3 caracteres juntos hasta cuando tenemos 12 valores
# del mismo caracter seguidos.
# Tan solo tenemos 4 columnas, ya que cada una de ellas
# identifica a cada una de las variables: a, c, g, t
# Recorremos el todo el fichero, hasta el final de sequencias.
matrizgraf3 <- matrix(0, nr=9, nc=4)
# Nos definimos un string en el que le vamos a ir concatenando
# letras al final, para que asi nos sirva de elemento de busqueda
# para que en cada iteracion nos diga cuantos elementos coinciden
# con esa cantidad de letras dentro de cada una de las secuencias.
listaa <- "aaa"
listac <- "ccc"
listag <- "ggg"
listat <- "ttt"
for(j in c(1:numSeq3)){
for (i in c(1:9)){
for(k in c(1:4)){
# Como comenzamos en 1, y queremos buscar
# a partir del elemento 3, por eso le vamos
# a incrementar en 2 elementos
auxiliar <- count(readseq[j],i+2)
aux_a <- auxiliar["listaa"]
if(aux_a > 0){
matrizgraf3[i][k] = matrizgraf3[i][k] + 1
listaa <- paste(listaa, "a", sep ="")
}
aux_c <- auxiliar["listac"]
if(aux_c>0){
matrizgraf3[i][k] = matrizgraf3[i][k] + 1
listac <- paste(listac, "c", sep="")
}
aux_g <- auxiliar["listag"]
if(aux_g>0){
matrizgraf3[i][k] = matrizgraf3[i][k] + 1
listag <- paste(listag, "g", sep="")
}
aux_t <- auxiliar["listat"]
if(aux_t>0){
matrizgraf3[i][k] = matrizgraf3[i][k] + 1
listat <- paste(listat, "t", sep="")
}
}
}
}
#GRAPHICO TRES
barplot(matrizgraf3,beside=TRUE,space=c(0.1,0.4),names.arg=c("3","4","5","6"
,"7","8","9","10","11","12","13","14","15","16","17","18","19","20"),col=c("
green", "blue", "red", "orange","black"),axes = TRUE, axisnames = TRUE,
xlab= "Homopolymer length", ylab = "counts")
legend("topright", c("T","A", "G","C","Other"), cex=0.4,
bty="n", lty=c(1,1), lwd=c(0.8,0.8),col=c("green", "blue", "red",
"orange","black"));
title(main="Homopolymer counts", cex.main = 1,font.main= 3)
#FIN GRAPHICO TRES
dev.off()
Gracias
Saludos
David Sanchez Rodriguez
Web personal: www.dasanro.es
Blog: www.laideafeliz.es
Twitter: @dasanro <https://twitter.com/#!/dasanro>
El 6 de marzo de 2013 12:20, Isidro Hidalgo <ihidalgo en jccm.es> escribió:
Hola, David:****
Te escribo fuera de lista, a ver si te puedo echar un cable... No está muy "sano" el código que presentas, pero no pasa nada:**** - Me imagino que quieres asignar un vector mediante: readseq <- *c(*"aaaaaaaaaaa", "aaa", "aa")**** - ¿Dónde está el bucle "for" de los Ãndices “i†y “j†de la siguiente sentencia?: auxiliar <- count(readseq[j],i+2)**** ** ** Creo que lo que te pasa es que vienes de programar en otro lenguaje y estás empezando en R. Si es asÃ, ¿Qué quieres hacer? Si me lo dices, quizá pueda ayudarte a escribir en R cómo se hace.**** Un saludo.**** ** ** Isidro Hidalgo Arellano**** Observatorio Regional de Empleo**** ConsejerÃa de Empleo y EconomÃa**** ihidalgo en jccm.es**** http://www.jccm.es**** ** ** ** **
-----Mensaje original-----**** De: r-help-es-bounces en r-project.org [mailto:r-help-es-bounces en r-**** project.org] En nombre de David Sanchez Rodriguez**** Enviado el: miércoles, 06 de marzo de 2013 11:24**** Para: r-help-es en r-project.org**** Asunto: [R-es] if dentro de for**** **** Buenas,**** **** Me encuentro con el mismo problema, de que me dice que el argumento del*
***
if no es un "valor ausente donde TRUE/FALSE es necesario"****
****
Este es mi codigo de pruebas.****
****
readseq <- "aaaaaaaaaaa", "aaa", "aa")****
auxiliar <- count(readseq[j],i+2)****
aux_a <- auxiliar["listaa"]****
if(aux_a > 0){****
matrizgraf3[i][k] = matrizgraf3[i][k] + 1 listaa <- paste(listaa, "a",**
**
sep ="") }**** **** **** **** Gracias**** **** Saludos,**** **** David Sanchez Rodriguez**** **** Web personal: www.dasanro.es**** Blog: www.laideafeliz.es**** Twitter: @dasanro <https://twitter.com/#!/dasanro>**** **** [[alternative HTML version deleted]]**** ****
_______________________________________________**** R-help-es mailing list**** R-help-es en r-project.org**** https://stat.ethz.ch/mailman/listinfo/r-help-es****
[[alternative HTML version deleted]]