Замена на l oop с применением функций - PullRequest
0 голосов
/ 21 января 2020

Я хочу заменить вложенные циклы for соответствующей функцией apply в R.

Я объявляю матрицу со следующими размерами - ncol равно 412 и nrow 2164

dist.name.enh <- matrix(NA, ncol = length(WW_name),nrow = length(Px_name))

Циклы for для вычисления расстояния между строками:

for(i in 1:length(WW_name)) {
  for(j in 1:length(Px_name)) {

    dist.name.enh[j,i]<-stringdist(tolower(WW_name)[i],
                                   tolower(Px_name)[j],
                                   method = "lv")
  }  
}

Как избежать циклов for, поскольку для возврата матрицы требуется очень много времени.

Код ищется с Сайт R-bloggers

1 Ответ

2 голосов
/ 21 января 2020

Здесь вы можете использовать outer, который будет применять функцию к каждой комбинации x и y.

outer(tolower(WW_name), tolower(Px_name), stringdist::stringdist, method = "lv")

Например,

x <- c("random", "strings", "to", "test")
y <- c("another", "string", "test")

outer(x, y, stringdist::stringdist, method = "lv")

#      [,1] [,2] [,3]
#[1,]    6    6    6
#[2,]    7    1    6
#[3,]    6    5    3
#[4,]    6    5    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...