Альтернатива для петель


Рассмотрим следующие примеры данных:

mapmatrix <- cbind(c(1,2,3,4,5,6),c(1,2,4,5,7,10))
arrayA <- c(1,2,4,7,10)
arrayB = rep(0,length(arrayA))
for(i in 1:length(arrayB))
{
arrayB[i] = which(mapmatrix[,2]==arrayA[i])
}

Мне было сказано избегать for-петель в R, насколько это возможно. Я нашел это очень трудоемким, даже когда arrayA имел около 400K элементов, а mapmatrix был размером {2 миллиона x 2}. Буду признателен, если я смогу заменить for-цикл более быстрой альтернативой.

1 2

1 ответ:

Вы можете попробовать:

 match(arrayA, mapmatrix[,2])
 #[1] 1 2 3 5 6

Если у вас есть повторные матчи, fmatch из library(fastmatch) будет быстрее

  library(fastmatch)
  fmatch(arrayA, mapmatrix[,2])
  #[1] 1 2 3 5 6