【问题标题】:How do I calculate the hamming distance in R on a set of binary values?如何在一组二进制值上计算 R 中的汉明距离?
【发布时间】:2015-02-08 23:28:13
【问题描述】:

对于具有 2 列和 45,000 多行的数据集,我需要计算汉明距离并将它们绘制在 R 中的集群中。是否有知名的图书馆可用于此?或者是否有比其他策略更强大的推荐策略?

我尝试了“e1071”包中的 hamming.distance 函数,并得到以下错误。但是,即使我知道如何计算汉明距离,我也不确定如何从这些结果过渡到聚类图?

Error: evaluation nested too deeply: infinite recursion/options(expressions=)?
2015-02-02 18:50:59.704 R[1162:679616] Communications error:    <OS_xpc_error<error: 0x7fff7aaadb60> { count = 1, contents =
"XPCErrorDescription" => <string: 0x7fff7aaadfa8> { length = 22, contents =    "Connection interrupted" }

我试过这段代码:

 H<-hamming.distance(df)

df 看起来像这样:

Name   Code
name1   0
name2   0
name3   1
name4   1
name5   0

感谢您查看此问题,非常感谢您提供任何帮助。

【问题讨论】:

  • 你在说什么集群?你使用 hclust 还是 kmeans?

标签: r binary hamming-distance


【解决方案1】:

要将每一行的值与前一行的值进行比较,请创建一个作为前一行的新列,并将此函数应用于两列。

df = data.frame(x1=as.character(c("0", "0", "1")))
df$x2 = c(NA, df$x1[-1])

hamming.distance = function(string1, string2){
  if (is.na(string2)==T) { 
    return (NULL)
  }
  string1 = as.character(string1)
  string2 = as.character(string2)

  length.string1 = nchar(string1)
  length.string2 = nchar(string2)

  if (length.string1 != length.string2) warning("Inputs must be of equal length")

 string.temp1 = c()
 for (i in 1:length.string1){
    string.temp1[i] = substr(string1, start=i, stop=i)
   }
  string.temp2 = c()
  for (i in 1:length.string2){
    string.temp2[i] = substr(string2, start=i, stop=i)
  }
   return(sum(string.temp1 != string.temp2))
}

results = mapply(hamming.distance, df[,1], df[,2])

unlist(results)

注意:unlist(results) 的长度将比 df 对象中的行数短 1,因为第一个条目是 NA,unlist 删除了该值。

【讨论】:

  • 当我应用(df,1,hamming.distance)时,我收到此错误:“FUN 中的错误(newX[, i], ...):缺少参数“string2”,没有默认值”。我已经对这意味着什么进行了一些研究,但没有得出很好的结果。你有什么建议吗?
  • 您是否在比较两列,每一行?或者您是否将 df 中的每一行与前一行进行比较?
  • 我将 df 中的每一行与前一行进行比较。
【解决方案2】:

可以使用stringdist包计算汉明距离:http://cran.r-project.org/web/packages/stringdist/stringdist.pdf

例如:

library(stringdist)
df <- data.frame( column1 = c("toned", "10112"), column2 = c("roses", "10223"))
stringdistmatrix(df$column1, df$column2, method = c("hamming"))#for distance matrix
stringdist(df$column1, df$column2, method = c("hamming"))#for vector of distance

【讨论】:

  • 我输入了 install.packages(stringdist),我得到了这个错误: install.packages(stringdist) 中的错误:找不到对象'stringdist'。此外,当我键入 library(stringdist) 时,我收到此错误: library(stringdist) 中的错误:没有名为“stringdist”的包。你对我可能做错的事情有什么建议吗?谢谢。
  • 试试 install.packages("stringdist")
猜你喜欢
  • 2013-11-18
  • 2015-12-20
  • 2019-09-02
  • 1970-01-01
  • 2019-04-23
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多