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]]

