he conseguido escribir una for loop
para comparar las cartas en el siguiente vector:comparar los elementos adyacentes del mismo vector (bucles evitando)
bases <- c("G","C","A","T")
test <- sample(bases, replace=T, 20)
test
volverá
[1] "T" "G" "T" "G" "C" "A" "A" "G" "A" "C" "A" "T" "T" "T" "T" "C" "A" "G" "G" "C"
con la función Comp()
I puede verificar si una letra coincide con la siguiente letra
Comp <- function(data)
{
output <- vector()
for(i in 1:(length(data)-1))
{
if(data[i]==data[i+1])
{
output[i] <-1
}
else
{
output[i] <-0
}
}
return(output)
}
Resultando en;
> Comp(test)
[1] 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0
Esto funciona, pero es muy lento con grandes cantidades. Para ello he intentado sapply()
Comp <- function(x,i) if(x[i]==x[i+1]) 1 else 0
unlist(lapply(test, Comp, test))
Desafortunadamente no su trabajo ... (Error in i + 1 : non-numeric argument to binary operator
) tengo problemas para averiguar cómo acceder a la letra precedente en el vector para compararlo. También el length(data)-1
, para "no comparar" la última letra podría convertirse en un problema.
¡Gracias a todos por la ayuda!
Saludos Lucky
Reformulé el título para ilustrar mejor el problema y como referencia. También debe tener en cuenta que sapply/lapply etc. * son * loops, aunque en una forma diferente. Ver también http: // stackoverflow.com/questions/2275896/is-rs-apply-family-more-than-syntactic-sugar –
Gracias, soy nuevo en R y en programación y no estoy familiarizado con los términos – LuckyLion