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]]
Hola, ¿Valor de "j"? ¿Valor de "i"? ¿"count()" es la función del paquete "plyr"? ¿Puedes enviar un ejemplo más reproducible? O darnos detalles de qué es lo que contiene "aux_a"... Saludos, Carlos Ortega www.qualityexcellence.es El 6 de marzo de 2013 11:23, David Sanchez Rodriguez <dasanro@gmail.com>escribió:> 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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
On Wednesday 06 March 2013 11:23:58 David Sanchez Rodriguez wrote:> 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 ="") > }Estimado David Primera línea, tiene un error, tendría que ser c('aaaa','aaa',aa') Segunda línea ¿count?, no me suena usarlo en R de esa forma. Javier Marcuzzi
Hola, Os amplio la informacion al codigo completo. Que estoy intentando probar para 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:04, Carlos Ortega <cof@qualityexcellence.es>escribió:> Hola, > > ¿Valor de "j"? ¿Valor de "i"? > ¿"count()" es la función del paquete "plyr"? > > ¿Puedes enviar un ejemplo más reproducible? > O darnos detalles de qué es lo que contiene "aux_a"... > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > El 6 de marzo de 2013 11:23, David Sanchez Rodriguez <dasanro@gmail.com>escribió: > >> 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@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >[[alternative HTML version deleted]]
¿Podríamos ponernos un ejemplo replicable en nuestras máquinas? Personalmente creo que estas obteniendo un NA cuando obtienes auxiliar. De todas maneras a mi cuando me falla un bucle lo que hago es: Poner ordenes como print(i) en el bucle, para ver donde tienes el fallo. O correr lo que he llamando "Ordenes para detectar fallos" #------------------------------------------------------------------------------------------------------ # Ejemplo de bucle #------------------------------------------------------------------------------------------------------ DD <- rbind(mtcars, rep(x=NA,11), mtcars ) rownames(DD)[33] <- "FALLO" rownames(DD) # EN la 33 le pongo nombre Fallo que es lo que va a salir for(i in 1:dim(DD)[1]){ print(i) if(DD$mpg[i]>0){ print( rownames(DD)[i] ) } } #------------------------------------------------------------------------------------------------------ # Ordenes para detectar fallos #------------------------------------------------------------------------------------------------------ i<- 1 # corre el programa varias veces i<- i +1 # Cuerpo del bucle print(i) if(DD$mpg[i]>0){ print( rownames(DD)[i] ) } # Fin del bucle [[alternative HTML version deleted]]
Hola Javier y el resto, He realizado lo que pone en el siguiente link en la seccion Over-represented and under-represented DNA word https://a-little-book-of-r-for-bioinformatics.readthedocs.org/en/latest/src/chapter2.html Pero que en mi caso, en lugar de que me saque todos los casos, pongo el if() para comprobar y pedir que solo me saque el caso de AAA CCC GGG TTT (y asi hasta tener 12 AAAAA,....) en lugar de que me saque todas las convinaciones posibles como podeis ver en el link 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:35, Javier Villacampa González < javier.villacampa.gonzalez@gmail.com> escribió:> ¿Podríamos ponernos un ejemplo replicable en nuestras máquinas? > > Personalmente creo que estas obteniendo un NA cuando obtienes auxiliar. > > De todas maneras a mi cuando me falla un bucle lo que hago es: > Poner ordenes como print(i) en el bucle, para ver donde tienes el fallo. > O correr lo que he llamando "Ordenes para detectar fallos" > > > #------------------------------------------------------------------------------------------------------ > # Ejemplo de bucle > > #------------------------------------------------------------------------------------------------------ > DD <- rbind(mtcars, > rep(x=NA,11), mtcars ) > rownames(DD)[33] <- "FALLO" > rownames(DD) # EN la 33 le pongo nombre Fallo que es lo que va a salir > > for(i in 1:dim(DD)[1]){ > print(i) > if(DD$mpg[i]>0){ > print( rownames(DD)[i] ) > } > > } > > > > > > > > #------------------------------------------------------------------------------------------------------ > # Ordenes para detectar fallos > > #------------------------------------------------------------------------------------------------------ > i<- 1 > > > # corre el programa varias veces > i<- i +1 > > # Cuerpo del bucle > print(i) > if(DD$mpg[i]>0){ > print( rownames(DD)[i] ) > } > # Fin del bucle >[[alternative HTML version deleted]]
Para ser mas concretos, es el DNA WORDS https://a-little-book-of-r-for-bioinformatics.readthedocs.org/en/latest/src/chapter1.html David Sanchez Rodriguez Web personal: www.dasanro.es Blog: www.laideafeliz.es Twitter: @dasanro <https://twitter.com/#!/dasanro> Facebook: www.facebook.com/dasanro El 6 de marzo de 2013 12:52, David Sanchez Rodriguez <dasanro@gmail.com>escribió:> Hola Javier y el resto, > > He realizado lo que pone en el siguiente link en la seccion > Over-represented and under-represented DNA word > > > https://a-little-book-of-r-for-bioinformatics.readthedocs.org/en/latest/src/chapter2.html > > Pero que en mi caso, en lugar de que me saque todos los casos, pongo el > if() para comprobar y pedir que solo me saque el caso de AAA CCC GGG TTT (y > asi hasta tener 12 AAAAA,....) en lugar de que me saque todas las > convinaciones posibles como podeis ver en el link > > 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:35, Javier Villacampa González < > javier.villacampa.gonzalez@gmail.com> escribió: > > ¿Podríamos ponernos un ejemplo replicable en nuestras máquinas? >> >> Personalmente creo que estas obteniendo un NA cuando obtienes auxiliar. >> >> De todas maneras a mi cuando me falla un bucle lo que hago es: >> Poner ordenes como print(i) en el bucle, para ver donde tienes el fallo. >> O correr lo que he llamando "Ordenes para detectar fallos" >> >> >> #------------------------------------------------------------------------------------------------------ >> # Ejemplo de bucle >> >> #------------------------------------------------------------------------------------------------------ >> DD <- rbind(mtcars, >> rep(x=NA,11), mtcars ) >> rownames(DD)[33] <- "FALLO" >> rownames(DD) # EN la 33 le pongo nombre Fallo que es lo que va a salir >> >> for(i in 1:dim(DD)[1]){ >> print(i) >> if(DD$mpg[i]>0){ >> print( rownames(DD)[i] ) >> } >> >> } >> >> >> >> >> >> >> >> #------------------------------------------------------------------------------------------------------ >> # Ordenes para detectar fallos >> >> #------------------------------------------------------------------------------------------------------ >> i<- 1 >> >> >> # corre el programa varias veces >> i<- i +1 >> >> # Cuerpo del bucle >> print(i) >> if(DD$mpg[i]>0){ >> print( rownames(DD)[i] ) >> } >> # Fin del bucle >> > >[[alternative HTML version deleted]]
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@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@jccm.es**** > > http://www.jccm.es**** > > ** ** > > ** ** > > > -----Mensaje original-----**** > > > De: r-help-es-bounces@r-project.org [mailto:r-help-es-bounces@r-**** > > > project.org] En nombre de David Sanchez Rodriguez**** > > > Enviado el: miércoles, 06 de marzo de 2013 11:24**** > > > Para: r-help-es@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@r-project.org**** > > > https://stat.ethz.ch/mailman/listinfo/r-help-es**** >[[alternative HTML version deleted]]
Hola David, Como no tenemos tus "datos.fna", he probado con otros (dnafile) que venían en la función read.fna() del paquete seqinr.> head(readseq)[1] "a" "t" "g" "a" "a" "a" Y he aplicado tu código sobre este conjunto. Obtengo el mismo error que te sale a ti. Error en if (aux_a > 0) { : valor ausente donde TRUE/FALSE es necesario Y aparece en la primera iteración de i, j, k. En vez de utilizar el bucle, haz esto: i<-1 j<-1 k<-1 Con esos datos, obtengo esto:> auxiliar <- count(readseq[j],i+2) > auxiliaraaa aac aag aat aca acc acg act aga agc agg agt ata atc atg att caa cac 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cag cat cca ccc ccg cct cga cgc cgg cgt cta ctc ctg ctt gaa gac gag gat 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 gca gcc gcg gct gga ggc ggg ggt gta gtc gtg gtt taa tac tag tat tca tcc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 tcg tct tga tgc tgg tgt tta ttc ttg ttt 0 0 0 0 0 0 0 0 0 0 Y esto:> aux_a <- auxiliar["listaa"] > aux_a<NA> NA Claro, el error está en la expresión: auxiliar["listaa"]. ¿Que buscas con auxiliar["listaa"]? ¿Buscar la cadena "listaa" dentro de auxiliar?. "auxiliar" es una tabla. Para buscar dentro, la forma de hacerlo sería algo así *auxiliar[auxiliar=="listaa"]* Mira este ejemplo reproducible:> d <- factor(rep(c("A","B","C"), 10), levels = c("A","B","C","D","E")) > d[1] A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C Levels: A B C D E> d["A"][1] <NA> Levels: A B C D E> d[d=="A"][1] A A A A A A A A A A Levels: A B C D E Saludos, Carlos Ortega www.qualityexcellence.es El 6 de marzo de 2013 12:08, <javier.ruben.marcuzzi@gmail.com> escribió:> On Wednesday 06 March 2013 11:23:58 David Sanchez Rodriguez wrote: > > 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 ="") > > } > > Estimado David > > Primera línea, tiene un error, tendría que ser c(''aaaa'',''aaa'',aa'') > Segunda línea ¿count?, no me suena usarlo en R de esa forma. > > Javier Marcuzzi > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Buenas noches David, Una forma es utilizando la funcion gregexpr:> x <- "AAACGATCGATAGGGTTTGACAGATAGATAGATAGAAATTCGCTTTT" > gregexpr("AAA", x)[[1]] [1] 1 36 attr(,"match.length") [1] 3 3 attr(,"useBytes") [1] TRUE> gregexpr("TTT", x)[[1]][1] 16 44 attr(,"match.length") [1] 3 3 attr(,"useBytes") [1] TRUE Saludos, Jorge.- 2013/3/6 David Sanchez Rodriguez <>> 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@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@jccm.es**** > > > > http://www.jccm.es**** > > > > ** ** > > > > ** ** > > > > > -----Mensaje original-----**** > > > > > De: r-help-es-bounces@r-project.org [mailto:r-help-es-bounces@r-**** > > > > > project.org] En nombre de David Sanchez Rodriguez**** > > > > > Enviado el: miércoles, 06 de marzo de 2013 11:24**** > > > > > Para: r-help-es@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@r-project.org**** > > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es**** > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
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]]
Hola David, Si te he entendido bien con esto se construye lo que quieres: #-------------------------------------------------------------- library(stringr) x <- "AAACGATCGATAGGGTTTGACAGATAGATAGATAGAAATTCGCTTTT" let.ras <- c("A", "C", "G", "T") num.repe <- 5 res.out <- data.frame(base=0,veces=0) cont <- 0 for(i in 1:num.repe) { for(j in 1:length(let.ras)) { cont <- cont+1 let.tmp <- paste(rep(let.ras[j],i), collapse="") vec.tmp <-str_locate_all(x, let.tmp) vec.es <- dim(as.data.frame(vec.tmp))[1] res.out[cont,1] <- let.tmp res.out[cont,2] <- vec.es } #for(j...) } #for(i...) #------------------------------------------------------------------> res.outbase veces 1 A 17 2 C 5 3 G 11 4 T 14 5 AA 2 6 CC 0 7 GG 1 8 TT 4 9 AAA 2 10 CCC 0 11 GGG 1 12 TTT 2 13 AAAA 0 14 CCCC 0 15 GGGG 0 16 TTTT 1 17 AAAAA 0 18 CCCCC 0 19 GGGGG 0 20 TTTTT 0 Saludos, Carlos Ortega www.qualityexcellence.es El 6 de marzo de 2013 13:15, David Sanchez Rodriguez <dasanro@gmail.com>escribió:> 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@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@jccm.es**** > > > > http://www.jccm.es**** > > > > ** ** > > > > ** ** > > > > > -----Mensaje original-----**** > > > > > De: r-help-es-bounces@r-project.org [mailto:r-help-es-bounces@r-**** > > > > > project.org] En nombre de David Sanchez Rodriguez**** > > > > > Enviado el: miércoles, 06 de marzo de 2013 11:24**** > > > > > Para: r-help-es@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@r-project.org**** > > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es**** > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Otra manera es via funciones de "base": # calcula la longitud de las repeticiones # "tomatch" en una "secuencia" de DNA foo <- function(secuencia, tomatch){ r <-mapply(function(x, y) length(gregexpr(y, x)[[1]]), secuencia, tomatch) names(r) <- NULL r } # ejemplo x <- "AAACGATCGATAGGGTTTGACAGATAGATAGATAGAAATTCGCTTTT" foo(x, "A") # cuantas A? foo(x, "AA") # cuantas AA? foo(x, "AAA") # cuantas AAA? foo(x, "ACT") # cuantas ACT? Jorge.- 2013/3/8 Carlos Ortega <cof@qualityexcellence.es>> Hola David, > > Si te he entendido bien con esto se construye lo que quieres: > > #-------------------------------------------------------------- > library(stringr) > x <- "AAACGATCGATAGGGTTTGACAGATAGATAGATAGAAATTCGCTTTT" > let.ras <- c("A", "C", "G", "T") > > num.repe <- 5 > res.out <- data.frame(base=0,veces=0) > cont <- 0 > for(i in 1:num.repe) { > > for(j in 1:length(let.ras)) { > > cont <- cont+1 > let.tmp <- paste(rep(let.ras[j],i), collapse="") > vec.tmp <-str_locate_all(x, let.tmp) > vec.es <- dim(as.data.frame(vec.tmp))[1] > res.out[cont,1] <- let.tmp > res.out[cont,2] <- vec.es > > } #for(j...) > > } #for(i...) > #------------------------------------------------------------------ > > > res.out > base veces > 1 A 17 > 2 C 5 > 3 G 11 > 4 T 14 > 5 AA 2 > 6 CC 0 > 7 GG 1 > 8 TT 4 > 9 AAA 2 > 10 CCC 0 > 11 GGG 1 > 12 TTT 2 > 13 AAAA 0 > 14 CCCC 0 > 15 GGGG 0 > 16 TTTT 1 > 17 AAAAA 0 > 18 CCCCC 0 > 19 GGGGG 0 > 20 TTTTT 0 > > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > El 6 de marzo de 2013 13:15, David Sanchez Rodriguez > <dasanro@gmail.com>escribió: > > > 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@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@jccm.es**** > > > > > > http://www.jccm.es**** > > > > > > ** ** > > > > > > ** ** > > > > > > > -----Mensaje original-----**** > > > > > > > De: r-help-es-bounces@r-project.org [mailto:r-help-es-bounces@r-**** > > > > > > > project.org] En nombre de David Sanchez Rodriguez**** > > > > > > > Enviado el: miércoles, 06 de marzo de 2013 11:24**** > > > > > > > Para: r-help-es@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@r-project.org**** > > > > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es**** > > > > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]