2016-10-09 6 views
0

観測ごとにmatrix(またはdata.frame)を含むRのデータ構造を構築する必要があります。理想的にはdata.frameの中にmatrixとなります。これまでのところ、ネストされたリストについては、それを達成するために考えることしかできませんが、パフォーマンスが低下することは恐れられます。Rの中のdata.frameのフレームまたは他のネストされた構造

例えば、data.frame素子

df <- data.frame(start=c("A", "B", "C"), end=c("A", "B", "C")) 

ため私は(距離関数から生じる)各セルのマトリックスを含有するカラムを追加したいです。例えば、要素は、「A」、端==「B」は行列(又はdata.frame)とすることができる

haversineStart haversineEnd tripLengthDiff startCountry endCountry truckDiff 
160.5408  308.1947  198.745   1   1   1 
152.4168  308.1947   20.710   1   1   1 
273.7599 2228.3508  2903.212   0   1   1 

は理論的には、それだけで、3Dデータ構造のいくつかの種類であろう==始めます。 Pythonでは、NumPy配列を含むリストのリストになります。 Rのようなことが可能ですか?

背景

私はカスタム距離関数とKNN実行したいと私はあなたがすでにリストを入れ子にしている場合はknn

答えて

1

を実行する前に距離を正規化する必要があります。

d <- list(
    a = list(matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2)), 
    b = list(matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2), matrix(rnorm(4), 2, 2)) 
) 

することができますdata.frameをまだリストにしておくと、data.frameを簡単に変換します。

class(d) <- 'data.frame' 
colnames(d) <- c('A', 'B') 
rownames(d) <- c('A', 'B', 'C') 

d['A', 'B'] 

# [[1]] 
#   [,1]  [,2] 
# [1,] -0.6326935 -1.1181986 
# [2,] -1.3066515 0.6672159 
1

data.frameの新しい列に行列のリストを代入するだけです。例えば、質問からdfを仮定:そう

m <- matrix(c(1, 12, 3, 14), 2) 
df$mat <- list(m, 2*m, 3*m) # test list 

> df$mat[[1]] 
    [,1] [,2] 
[1,] 1 3 
[2,] 12 14 

> df[[1, "mat"]] 
    [,1] [,2] 
[1,] 1 3 
[2,] 12 14 

> transform(df, det = sapply(mat, det)) 
    start end   mat det 
1  A A 1, 12, 3, 14 -22 
2  B B 2, 24, 6, 28 -88 
3  C C 3, 36, 9, 42 -198 
関連する問題