сравнить соседние элементы одного и того же вектора (избегая циклов)

I удалось написать цикл for для сравнения букв в следующем векторе:

bases <- c("G","C","A","T")
test <- sample(bases, replace=T, 20)

test вернет

[1] "T" "G" "T" "G" "C" "A" "A" "G" "A" "C" "A" "T" "T" "T" "T" "C" "A" "G" "G" "C"

с функцией Comp () Я могу проверить, есть ли буква соответствует следующей букве

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)
}

В результате;

> Comp(test)
 [1] 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 1 0

Это работает, однако очень медленно с большими числами. Поэтому я попробовал sapply ()

Comp <- function(x,i) if(x[i]==x[i+1]) 1 else 0
unlist(lapply(test, Comp, test))

К сожалению, он не работает ... ( Ошибка в i + 1: нечисловой аргумент бинарного оператора ). У меня проблемы с определением, как получить доступ к предыдущему буква в векторе для сравнения. Также проблема длина (данные) -1 , чтобы «не сравнивать» последнюю букву, может стать проблемой.

Спасибо всем за помощь!

Ура Lucky

5
задан Joris Meys 5 August 2011 в 13:11
поделиться