1

ハミング距離を計算し、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

この質問をご覧いただきありがとうございます。どんな助けでも大歓迎です。

4

2 に答える 2

2

各行の値を前の行の値と比較するには、前の行である新しい列を作成し、この関数を両方の列に適用します。

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)

注:最初のエントリは NA であり、その値を削除するため、の長さはオブジェクトunlist(results)の行数よりも 1 短くなります。dfunlist

于 2015-02-03T20:45:50.597 に答える