2015-09-13 1 views
1

Существует ли более эффективный способ достижения следующего?Более эффективный метод заполнения матрицы, чем вложенные для циклов

library(dplyr) 
filers <- sapply(1:100, function(z) sample(letters, sample(1:20, 1), replace=T) %>% paste(collapse='')) %>% unlist() %>% unname() 
n <- length(unique(filers)) 
similarityMatrix <- matrix(0, nr=n, nc=n) 
for (i in 1:n) { 
    for (j in 1:n) { 
     similarityMatrix[i, j] <- compare_strings(filers[i], filers[j]) 
    } 
} 

Примечание: compare_strings псевдо-код для подразумевающего типа операций я пытаюсь выполнить. В приведенных ниже комментариях была некоторая путаница с предшествующей формой вопроса, потому что stringdist поставляется с функцией stringdistmatrix. Мой сценарий включает функцию, которая не имеет этого параметра, и, таким образом, вопрос был изменен, чтобы отразить комментарии ниже.

+0

'stringdistmatrix (Filers, Фирс)' – hrbrmstr

+0

@hrbrmstr Я согласен, что ваше решение было бы совершенно идеальным, если 'stringdist' были фактические функции я использую. Я использую более надежную функцию сравнения строк, которая принимает только два строковых значения за раз. – brittenb

+1

возможно, вам следовало бы поставить это в вопрос тогда? – hrbrmstr

ответ

3

Это, вероятно, не более эффективно, но более читаемо. Он также выделяет матрицу для вас:

similarityMatrix <- outer(filers, filers, FUN=compare_strings) 
+0

У меня пока нет работы, но я почти уверен, что это то, чего я хотел. Благодаря! – brittenb

+0

Ответ, который вы предоставили, определенно более читабельен, и мне нравится тот факт, что он выделяет вам матрицу. Тем не менее, он все еще очень неэффективен, и я бы предпочел что-то немного быстрее. – brittenb

+0

Единственный способ получить что-то быстрее - это векторизация сравнения строк. –

 Смежные вопросы

  • Нет связанных вопросов^_^