Набор функций не только работает для матриц, но и масштабируется до многомерного массива. В моих исследованиях я часто располагаю набором данных, например, температуры атмосферы. Это сохраняется в многомерном массиве с размерами x,y,level,time
, отныне он называется multi_dim_array
. Макет пример был бы:
multi_dim_array = array(runif(96 * 48 * 6 * 100, -50, 50),
dim = c(96, 48, 6, 100))
> str(multi_dim_array)
# x y lev time
num [1:96, 1:48, 1:6, 1:100] 42.4 16 32.3 49.5 24.9 ...
apply
Использование можно легко получить:
# temporal mean value
> str(apply(multi_dim_array, 4, mean))
num [1:100] -0.0113 -0.0329 -0.3424 -0.3595 -0.0801 ...
# temporal mean value per gridcell (x,y location)
> str(apply(multi_dim_array, c(1,2), mean))
num [1:96, 1:48] -1.506 0.4553 -1.7951 0.0703 0.2915 ...
# temporal mean value per gridcell and level (x,y location, level)
> str(apply(multi_dim_array, c(1,2,3), mean))
num [1:96, 1:48, 1:6] -3.839 -3.672 0.131 -1.024 -2.143 ...
# Spatial mean per level
> str(apply(multi_dim_array, c(3,4), mean))
num [1:6, 1:100] -0.4436 -0.3026 -0.3158 0.0902 0.2438 ...
Это делает margin
аргумент apply
кажутся намного меньше счетчик интуитивно. Сначала я хочу, почему бы не использовать «row» и «col» вместо 1 и 2. Но тот факт, что он также работает для массива с большим количеством измерений, дает понять, почему использование margin
, как это предпочтительнее.
Есть намного больше подводных камней, больших и малых, в 'The R Inferno' http://www.burns-stat.com/pages/Tutor/R_inferno .pdf –
Пробел имеет значение в инструкции if-else. 'Ошибка: неожиданно 'else' в" else "' выскочит, когда вы поместите новую строку после фигурной скобки в инструкции if: 'if {...} \ n else {...}'. – TMS
Функция 'выбрать'. 'select (n, k)' не является числом подмножеств 'k'-элементов набора' n'-элементов.Например, «выберите (-4,2) == 10'. – Flounderer