3

平面内の点を表すデータ フレームがあります。

     x     y
1  0.0   0.0
2  0.2   0.0
3  0.3  -0.1
...

diffそのデータのような関数を書きたいです。距離関数myDist(ユークリッドではない) を作成しましたが、それをデータ フレームに適用するにはどうすればよいですか?

つまり: を呼び出して、値, , , ...someFunction( myData, myDist )を持つベクトルを取得したいmyDist(myData[1,],myData[2,])myDist(myData[2,],myData[3,])myDist(myData[3,],myData[4,])

これを行う関数はありますか、それともループを書く必要がありますか?

4

2 に答える 2

2

で解決しましたlapply

lapply(seq_len(nrow(myData) - 1),
    function(i){
        myDist( myData[i,], myData[i+1,] )
    })
于 2012-11-22T02:45:52.303 に答える
0

を使用head(myData, -1)tail(myData, -1)て、行を希望どおりに並べた2つのデータセットを取得できますmyDist。ベクトル化されている場合は、結果をに渡すだけです。ベクトル化されていない場合は、(または関数)をmyDist使用できます。または、、、、ループまたはその他の機能。mapplyVectorizesapplylapplyapply

myData <- data.frame( x=1:10, y=sample(1:10), z=rnorm(10) )

myDist <- function( one, two ) {
    sqrt( rowSums( (one-two)^2 ) )
}

myDist( head(myData,-1), tail(myData,-1) )
于 2012-11-22T14:23:33.647 に答える