Размеры статистики, приведенные в STATS
, должны совпадать с размерами, полученными в результате MARGIN
изменения данных во входном массиве или, хотя это и не рекомендуется, размера, кратного числуэлементы в этом результате (например, длина 2 в массиве 2x3; или массив 2x4 в массиве 2x4x3; или массив 2x2 в массиве 2x4x3 и т. д.).
Чтобы понять размеры, полученные в результате MARGIN
изменяя данные, давайте рассмотрим пример:
# Example data in a 3D array of size 2x3x4
set.seed(1717)
x = array(runif(2*3*4), c(2,3,4))
# We MARGINalize the data by computing the mean on all dimensions *other than*
# the stated ones: (1, 3)
# This gives a 2D result whose dimension is of size
# "length of dim 1" x "length of dim 3", i.e. 2x4
marginalize_on_dims = c(1,3)
m = apply(x, marginalize_on_dims, mean)
, который приводит к следующему массиву 2x4 "означает":
> m
[,1] [,2] [,3] [,4]
[1,] 0.3662613 0.2971481 0.155660 0.5121214
[2,] 0.5808111 0.7322553 0.662044 0.4984720
Теперь мы вычеркнем вычисленные средние значения m
из исходного массива x
:
x_swept_out_of_means_m = sweep(x, STATS=m, MARGIN=marginalize_on_dims)
, что приводит к:
> x_swept_out_of_means_m
, , 1
[,1] [,2] [,3]
[1,] -0.2934119 -0.3224825 0.6158943
[2,] -0.4540748 0.1814070 0.2726678
, , 2
[,1] [,2] [,3]
[1,] -0.1452443 0.3631910 -0.21794673
[2,] -0.1205201 0.0873856 0.03313448
, , 3
[,1] [,2] [,3]
[1,] -0.0766162667 -0.14700413 0.22362039
[2,] 0.0006661599 0.05828265 -0.05894881
, , 4
[,1] [,2] [,3]
[1,] 0.2341822 -0.4071083 0.1729261
[2,] -0.2680816 0.4772658 -0.2091843
Теперь отметим, что в сводке по полученному результату показано среднее значение 0
, котороесоответствует вычитанию среднего:
> summary(x_swept_out_of_means_m)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.45407 -0.21137 -0.02914 0.00000 0.19196 0.61589
Поэтому в вашем примере, поскольку вы маргинализуете измерения 1 и 2, вам следует использовать значение STATS
, имеющее измерение 2x3, например:
x <- array(1, dim=c(2,3,4,5))
sweep(x, STATS=matrix(nrow=c(2,3), data=c(2,3,-2,4,0,-3)), MARGIN=c(1,2), FUN='*')
whПрежде чем результатом должен быть массив 2x3x4x5 со следующим массивом 2x3, повторенным 4x5 раз:
[,1] [,2] [,3]
[1,] 2 -2 0
[2,] 3 4 -3
Информация о сеансе:
> sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)