R:字符串中不同字符数的成对矩阵

R: pairwise matrix of the number of characters that differ among strings

我有一个包含大量长度相同的字符串的向量。例如:

vec = c("keep", "teem", "meat", "weep")

我想比较此向量中每对可能的字符串,并计算它们之间不同的字符数。使用上面的向量,“keep”将与向量中的所有其他字符串进行比较,“teem”将与其他所有字符串进行比较,依此类推。 我只对计算每个字符串中相同位置的不同字符数感兴趣。因此,例如“keep”与“teem”会有 2 个差异,“keep”与“meat”有 3 个差异,等等。我想将结果输出为成对矩阵,其中向量中的字符串组成行名和列名。

我从另一个 post (How can I compare two strings to find the number of characters that match in R, using substitution distance?) 那里了解到,我可以在 mapply 中使用 adist 参数来计算两个字符串之间的差异数:

mapply(adist,string1,string2)

但我不确定如何修改它以对我的向量中的每个可能的成对组合进行操作,并将结果放在成对矩阵中。关于如何做到这一点的任何想法?谢谢!!

您的意思是像下面那样使用 adist 吗?

> `dimnames<-`(adist(vec),rep(list(vec),2))
     keep teem meat weep
keep    0    2    3    1
teem    2    0    3    2
meat    3    3    0    3
weep    1    2    3    0

选项stringdistmatrix

library(stringdist)
out <- as.matrix(stringdistmatrix(vec))
dimnames(out) <- list(vec, vec)