Прежде чем представить вопрос, я укажу, что что-то подобное было задано here, но эта тема на самом деле не отвечает на мой вопрос.R: Заполнить многомерный массив по строке
Рассмотрим следующие одномерные массивы:
1D: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
2D: [[1,2,3,4,5,6,7,8], [9,10,11,12,13,14,15,16]]
3D: [[[1,2,3,4],[5,6,7,8]], [[9,10,11,12],[13,14,15,16]]]
4D: [[[[1,2],[3,4]], [[5,6],[7,8]], [[[9,10],[11,12]], [[13,14],[15,16]]]]
...
- Массив 1D является длина 16
- 2D-массив 2x8
- 3D-массив 2x2x4
- Массив 4D является 2x2x2x2
Предположим, я хочу создать массивы. Для первых двух, я мог бы сделать что-то подобное в R
oneD <- array(1:16, dim=16) # class(oneD) = array
twoD <- array(1:16, dim=8) # class(twoD) = matrix
Однако массив twoD теперь представлен в виде
[[1,3,5,7,9,11,13,15], [2,4,6,8,10,12,14,16]]
Я знаю двух способов обойти это.
twoD <- aperm(array(1:16, dim=8))
twoD <- matrix(1:16, nrow=2, byrow=TRUE)
Однако эти методы не будут работать для заполнения трехмерных и четырехмерных массивов. Я их заполняю ниже, но я бы хотел, чтобы они соответствовали моим определениям выше.
threeD <- array(1:16, dim=c(2,2,4)) # class(threeD) = array
fourD <- array(1:16, dim=c(2,2,2,2)) # class(fourD) = array
ответ EDIT
bgoldst заставил меня понять, что на самом деле АПРОН делает работу за то, что я хочу.
threeD <- aperm(array(1:16, dim=c(2,2,4))
# threeD[1,1,1] = 1
# threeD[1,1,2] = 2
# threeD[1,2,1] = 3
# threeD[1,2,2] = 4
# threeD[2,1,1] = 5
# ....
Являются ли они называемыми массивами? Они кажутся больше похожими на деревья из того, как они структурированы. – VermillionAzure
Возможно, что-то с 'length()' может вам помочь? – VermillionAzure
Вы, кажется, думаете с множеством доминирующих состояний. Если вы работаете с R, вы должны думать о матрице и конструкции массива как о столбце-ориентированном, –