- Rでリストは複雑な構造を持たせるのに便利。たとえば…
L.1 <- list(list(matrix(1:6,2,3),matrix(1:8,2,4)),list(1:5))
L.2 <- list(list(matrix(2:7,2,3),matrix(2:9,2,4)),list(2:6))
- 末尾に示すように構造は同じ。この構造を保ったまま、対応する成分同士で演算をしたい
- リストはベクトルなので、ベクトル化して演算するのが良さそう。apply()系の関数に何かある??
- 見当たらないけれど、リスト構造を保持したままベクトルにunlist()することはできるそうだ
L.1.a <- as.relistable(L.1)
L.2.a <- as.relistable(L.2)
L.1.v <- unlist(L.1.a)
L.2.v <- unlist(L.2.a)
L12.v <- L.1.v+L.2.v
L.12 <- relist(L12.v)
> L.1
[[1]]
[[1]][[1]]
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[[1]][[2]]
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
[[2]]
[[2]][[1]]
[1] 1 2 3 4 5
> L.2
[[1]]
[[1]][[1]]
[,1] [,2] [,3]
[1,] 2 4 6
[2,] 3 5 7
[[1]][[2]]
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 3 5 7 9
[[2]]
[[2]][[1]]
[1] 2 3 4 5 6
> L.1.a <- as.relistable(L.1)
> L.2.a <- as.relistable(L.2)
> L.1.v <- unlist(L.1.a)
> L.2.v <- unlist(L.2.a)
> L12.v <- L.1.v+L.2.v
> L.12 <- relist(L12.v)
> L.12
[[1]]
[[1]][[1]]
[,1] [,2] [,3]
[1,] 3 7 11
[2,] 5 9 13
[[1]][[2]]
[,1] [,2] [,3] [,4]
[1,] 3 7 11 15
[2,] 5 9 13 17
[[2]]
[[2]][[1]]
[1] 3 5 7 9 11
attr(,"class")
[1] "relistable" "list"
relist.sum <- function(L1,L2){
L1.a <- as.relistable(L1)
L2.a <- as.relistable(L2)
L1.v <- unlist(L1.a)
L2.v <- unlist(L2.a)
ret <- L1.v + L2.v
return(relist(ret))
}
relist.sum(L.1,L.2)