2011-10-18 36 views
9

(序文:私は統計学者でもプログラマーでもない。私は人文科学で働くので、私の魂に慈悲を)。ユークリッド距離計算はRが成立しない

私は(DISTを使用してきたR.における一連の点間のユークリッド距離を計算する必要が

)、次のように:

> x <- c(0,0) 
> y <- c(0,10) 
> dist(rbind(x,y)) 
    x 
y 10 

をこれまでのところ、とても良いです。しかし、私が(実数で)私の結果を見ていたら、彼らはひどく怒っていました。私のRスクリプトが間違った列からデータを取得していると思ったほどです。しかし、私は点検した、そしてそうではない。

私はおもちゃの番号で遊び始めました。私は驚いていました。 (横線)以下が行うように、上記の例(縦線)は、正常に動作:

> x <- c(0,10) 
> y <- c(0,0) 
> dist(rbind(x,y)) 
    x 
y 10 

しかし、ライン2点フォームが対角線である場合、違和感が行なわれる:

> x <- c(0,10) 
> y <- c(0,10) 
> dist(rbind(x,y)) 
    x 
y 0 

A距離0?ハァッ?それは正しいことではありません。

そしてポイントは(それが私のデータでは十分に可能です)、私たちはウサギの穴を下る同じ場合:

> x <- c(0,0) 
> y <- c(10,10) 
> dist(rbind(x,y)) 
    x 
y 14.14214 

は、これが0になるべきではないでしょうか。結局のところポイントは同じなので、それらの間には距離がありません。

dist()に何か問題がある場合は、私は手動でWikipediaを使って数式を実装しようとしました。同じ結果:

> sqrt(sum((x - y)^2)) 
[1] 14.14214 

私が上で述べたように、私の計算のバックグラウンドは最小であるため、ここのエラーは私のものだと全然期待しています。もしそうなら、それが何であるか、それを修正する方法を説明してください。しかし、私が今立つところから、何かが非常に間違っているように思えます。

そして、最悪の場合、データを分析することはできません。

+3

+1明確な最初の投稿については、ドキュメントのガイドラインに従ってください。 –

答えて

14

dist(cbind(x, y))のように見えますが、dist(rbind(x, y))ではありません。これを実行すると、あなたがやっていると思う何を

+0

それは本当にトリックを行うように見えます - 私のxベクトルはすべてx座標を持ち、yベクトルはすべてyベクトルを持っているので、私は行ではなく列でバインドする必要があります。ありがとう! –

9

distは、その引数のの各ペアのの間の距離行列を計算します。最初の「奇妙な」例のように行が同じ場合、距離は0になります。行が定数0と定数10の場合は、2番目の例のように、距離は実際にはsqrt((10- 0)^ 2 +(10-0)^ 2)= 14.142 ...

+0

A-ha!すべてクリア。ヘルプをよろしくお願いいたします。 –

7

x <- c(0,10) 
y <- c(0,0) 
dist(rbind(x,y)) 

あなたは2点(0,0)(10,0)を定義し、これら2点間の距離を計算するRを求めてきましたということです。

しかし、あなたは実際には、Rにそれをまったくやらないと頼んだことはありません!

あなたrbindベクトル一緒xy、あなたは行列で終わるとき:あなたはdistを呼び出すと

rbind(c(0,10),c(0,0)) 
    [,1] [,2] 
[1,] 0 10 
[2,] 0 0 

、それは行この行列のの間の距離を計算します。したがって、それらの間の距離は10です。

うまくいけばうまくいきましょう!

+0

ありがとう!それは確かに今や意味をなさない。 –

関連する問題