/ / Rまたは他のネストされた構造のdata.frame内の行列-r、多次元配列、データフレーム、距離、knn

Rまたは他のネストされた構造でdata.frame内部マトリックス - R、多次元アレイ、データフレーム、距離、KNN

私はRを含むデータ構造を構築する必要があります matrix (または data.frame)各観測に対して。理想的には、 matrix 内部 data.frame。これまでのところ、ネストされたリストを実現するためにしか考えられませんが、パフォーマンスが低下することを恐れています。

たとえば、data.frame要素の場合

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

各セルにマトリックスを含む列を追加します(距離関数の結果)。たとえば、要素start == "A"、end == "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は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

回答№2の場合は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