比嵌套 for 循环更有效的矩阵填充方法

More efficient method for populating a matrix than nested for loops

是否有更有效的方法来实现以下目标?

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。我的场景涉及一个没有该选项的函数,因此问题已被修改以反映下面的评论。

这可能不会更有效,但可读性更强。它还为您分配矩阵:

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