私は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