Мне кажется, я понимаю, что: (1) базовый массив 45х3; (2) каждая ячейка имеет матрицу разного размера; и (3) это не известно априори. Попался. Невозможно. Массив (матрица) всегда имеет идеальные размеры, и хотя вы можете динамически изменять одно или несколько измерений, вы изменяете для всех ячеек.
Альтернатива: список -columns .
dat <- data.frame(x=1:3, y=11:13)
dat$z <- lapply(3:5, function(i) matrix(seq_len(i^2), nr=i))
dat
# x y
# 1 1 11
# 2 2 12
# 3 3 13
# z
# 1 1, 2, 3, 4, 5, 6, 7, 8, 9
# 2 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
# 3 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25
Это выглядит не очень привлекательно, но если вам нужна другая презентация , вы можете рассмотреть возможность присвоения ей tibble::tbl_df
(доступно всякий раз, когда dplyr
также загружается). (Обратите внимание, что представление отличается от хранилище и доступность .)
library(tibble)
as_tibble(dat)
# # A tibble: 3 x 3
# x y z
# <int> <int> <list>
# 1 1 11 <int[,3] [3 x 3]>
# 2 2 12 <int[,4] [4 x 4]>
# 3 3 13 <int[,5] [5 x 5]>
Подмножество согласовано:
dat$z[ dat$x == 2 & dat$y == 12 ]
# [[1]]
# [,1] [,2] [,3] [,4]
# [1,] 1 5 9 13
# [2,] 2 6 10 14
# [3,] 3 7 11 15
# [4,] 4 8 12 16
### note that you need an extra [[1]] to get to the real data
m <- dat$z[ dat$x == 2 & dat$y == 12 ][[1]]
m
# [,1] [,2] [,3] [,4]
# [1,] 1 5 9 13
# [2,] 2 6 10 14
# [3,] 3 7 11 15
# [4,] 4 8 12 16
m[3,4]
# [1] 15