Rでdata.frame間の距離を測ってmatrixにする

昨日の続き。昨日は、vectorユークリッド距離を直接計算してたけど、data.frameの各行ごとの距離を測ろうとするとそういうワケにはいかんし。どうすんべ?と思っていたら、dist()という関数があった。何度か、「やっぱりObjective-Cで書いてみようか、C#で書いてみようか、perlで書いてみようか」と思ったけど、その辺の言語だとこういう行列計算が面倒なので、やっぱりRで。
というワケで、昨日のをちょっと直して、関数にしてみる。

myFunc <- function(df){
  len<-nrow(df) # 行数
  s <- matrix(NA,len,len)
  for(i in 1:len){
    for(j in 1:len){
      d <- dist(rbind(df[j,],df[i,]),method="euclidean") # distで距離を計算
      s[i,j]<- -1*d^2
    }
  }
# 自分自身の距離を測っても0になるに決まっているので、自分以外の各要素との距離のmedianを代入しとく
  m<-median(s[,1])
  for( i in 2:len){
    s[i,i] <- m
  }
  s
}

ちなみに、やりたいことはもちろんここで終わりじゃない。
ところで、function()で指定している引数(df)が、data.frameかvectorか?を判別する方法はあるだろうか?nrow(df)が1になった時は、vectorと判断して、各要素間でdist()するようにして、nrow(df)が1でない時は、各行をrbindしてdist()するようにする、、、とか、そういう方針で良いのかな?と思いつつ、そういうif文をRではどうやって書くのだろう?のレベルで悩む、、、、。