我有一個字符向量,並且想要爲每對向量值(使用stringdist
包)創建一個包含距離矩陣的矩陣。目前,我有嵌套的for循環的實現:優化R中for循環的性能
library(stringdist)
strings <- c("Hello", "Helo", "Hole", "Apple", "Ape", "New", "Old", "System", "Systemic")
m <- matrix(nrow = length(strings), ncol = length(strings))
colnames(m) <- strings
rownames(m) <- strings
for (i in 1:nrow(m)) {
for (j in 1:ncol(m)) {
m[i,j] <- stringdist::stringdist(tolower(rownames(m)[i]), tolower(colnames(m)[j]), method = "lv")
}
}
導致下面的矩陣:
> m
Hello Helo Hole Apple Ape New Old System Systemic
Hello 0 1 3 4 5 4 4 6 7
Helo 1 0 2 4 4 3 3 6 7
Hole 3 2 0 3 3 4 2 5 7
Apple 4 4 3 0 2 5 4 5 7
Ape 5 4 3 2 0 3 3 5 7
New 4 3 4 5 3 0 3 5 7
Old 4 3 2 4 3 3 0 6 8
System 6 6 5 5 5 5 6 0 2
Systemic 7 7 7 7 7 7 8 2 0
但是,如果我有 - 例如 - lenght 1000的矢量與許多非獨特的價值觀,這個矩陣是相當大的(比方說,800行800列)和循環是非常慢。我喜歡優化性能,例如通過使用apply
函數,但我不知道如何將上面的代碼翻譯成apply
語法。誰能幫忙?
'apply'也循環,並不見得快於for循環。請參閱http://stackoverflow.com/questions/2275896/is-rs-apply-family-more-than-syntactic-sugar – 2014-09-03 12:04:08
代碼優化問題應該在CodeReview上提出,而不是StackOverflow http://codereview.stackexchange.com/ – 2016-06-26 16:08:41