Как сделать матрицу расстояний из измерений расстояний из петли в R?

У меня есть список signatures, и я перебираю все комбинации в этом списке. Затем я вычисляю расстояние между комбинациями:

for (signature_combination in combn(signatures,2, simplify=FALSE))
   score(signature_combination[[1]],signature_combination[[2]])
   name1 <- signature_combination[[1]]$name
   name2 <- signature_combination[[2]]$name
}

name1 и name2 - это имена сравниваемых сигнатур, которые представляют собой имена строк и столбцов в матрице расстояний.

Теперь я хочу добавить это в фрейм данных, чтобы получить матрицу расстояний. Я знаю 3 способа добавления в фрейм данных, упомянутых здесь: https://stat.ethz.ch/pipermail/r-help/2006-June/107734.html. Однако это предполагает, что значения для всей строки уже известны, но у меня есть только 1 значение на каждый раз, когда я просматриваю цикл, и они не в порядке.

Как я могу добавить эти значения в фрейм данных, чтобы получить матрицу расстояний?


person Niek de Klein    schedule 11.03.2014    source источник


Ответы (1)


Почему вы вообще используете цикл? Я бы использовал expand.grid и by для выполнения работы:

comb = expand.grid(names(signature), names(signature))   # I fixed this line!
scores = by(comb,list(comb$Var1,comb$Var2), FUN=function(x) score(signature[[x[[1]]]],signature[[x[[2]]]]))
class(scores)="matrix"
scores
person amit    schedule 11.03.2014
comment
comb$Var2 равно NULL, так что это не сработает. Если я изменю comb$Var2 на comb$Var1, я получаю subscript out of bounds ошибку - person Niek de Klein; 12.03.2014
comment
Извините. У меня была ошибка в первой строке. Я починил это. - person amit; 13.03.2014