Скажем, у меня есть вектор символов с 8 буквами, каждый из которых встречается дважды:
x <- rep(LETTERS[1:8],2)
set.seed(1)
y <- sample(x)
y
# [1] "E" "F" "A" "D" "C" "B" "C" "G" "F" "A" "B" "G" "E" "H" "D" "H"
Я хочу найти интервалы между каждой парой букв. Здесь интервал относится к числу букв между двумя одинаковыми буквами. Я могу сделать это вручную следующим образом:
abs(diff(which(y=="A")))-1 #6
abs(diff(which(y=="D")))-1 #10
abs(diff(which(y=="H")))-1 #1
Я написал цикл for
, чтобы сделать это...
res<-NULL
for(i in 1:8){ res[[i]] <- abs(diff(which(y==LETTERS[i])))-1 }
names(res)<-LETTERS[1:8]
res
# A B C D E F G H
# 6 4 1 10 11 6 3 1
Однако я хочу использовать этот подход в процессе рандомизации с очень длинными векторами. Скорость важна для этого - мне интересно, есть ли у кого-то хорошие идеи для максимально быстрого подхода к этой проблеме.