udało mi się napisać for loop
porównać litery w następujący wektor:porównać sąsiadujących elementów tego samego wektora (pętle unikając)
bases <- c("G","C","A","T")
test <- sample(bases, replace=T, 20)
test
powróci
[1] "T" "G" "T" "G" "C" "A" "A" "G" "A" "C" "A" "T" "T" "T" "T" "C" "A" "G" "G" "C"
z funkcją Comp()
I może sprawdzić, czy litera pasuje do następnej litery:
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)
}
Wynik w;
> Comp(test)
[1] 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0
To działa, ale jego wersja jest wolna i zawiera duże liczby. Nich próbowałem sapply()
Comp <- function(x,i) if(x[i]==x[i+1]) 1 else 0
unlist(lapply(test, Comp, test))
Niestety jej nie działa ... (Error in i + 1 : non-numeric argument to binary operator
) Mam problemy ze zorientowaniem się, jak uzyskać dostęp do poprzedzającego nas w wektorze aby je porównać. Również length(data)-1
, aby "nie porównywać" ostatniej litery, może stać się problemem.
Dziękuję wszystkim za pomoc!
Cheers szczęście
Zmieniłem tytuł, aby lepiej zilustrować problem i dla celów porównawczych. Powinieneś także pamiętać, że sapply/lapply itp. * Są * pętle, aczkolwiek w innej formie. Zobacz także http: // stackoverflow.com/questions/2275896/is-rs-apply-family-więcej niż syntaktyczny-cukier –
Dziękuję, jestem nowy w R i programowaniu i nieznajomym w warunkach – LuckyLion