Этот код не может работать, и вы должны хотя бы попробовать его сами:
array(2,2,2,2) ## results in unused argument error
Я думаю, вы хотите 4D массив
U <- array(0, dim = c(2,2,2,2))
, а затем для присвоения 2D части используйте R's? Синтаксис
U[1,1,,] <- cbind(c(0.7,0.3),c(0.3,0.7))
Код U[1][1]
можно понять с точки зрения того, что U обрабатывается так, как если бы он был вектором без атрибута "dim" (только числа в векторе, без размерной структуры). Первый [1]
извлекает первый элемент, возвращая вектор одного элемента, а второй [1]
, в свою очередь, избыточно извлекает первый элемент из этого вектора одного элемента.
С точки зрения понимания, что такое U[1,1,,]
: это двумерная матрица, которая является подмножеством массива 4D U
, определяемая путем взятия первого среза из первого и второго измерений и каждого среза из третьего и четвертое измерение.
Ошибка, которую вы видите, связана с тем, что вы пытаетесь присвоить 2D-матрицу одному элементу U
- но есть только один слот, а структура и размер первого элемента отличаются от матрицы, которой вы являетесь пытаясь раздавить его.
Синглтонные измерения (первое и второе), которые имеют только один срез из извлеченного подмножества, удаляются (по умолчанию) из результата. Этого можно избежать, указав:
U[1, 1, , , drop = FALSE]
, который дал бы массив 4D, но один с двумя «вырожденными» измерениями, т.е. [1, 1, 2, 2], где первые два вида избыточны (но смысл этого действительно зависит от вашей цели). Эта часть на самом деле не имеет отношения к проблеме присвоения новых значений подмножеству исходного массива, но может помочь вашему пониманию.
Подойдет ли вам массив или список, зависит от того, что вы хотели бы сделать, поэтому я бы порекомендовал повторно задать ваш вопрос и сосредоточиться на этих потребностях.