«диапазон» R массивов

#r #arrays #multidimensional-array

#r #массивы #многомерный массив

Вопрос:

У меня есть массив a размерности I x J и массив b размерности K . Я хочу создать массив c I x J x K такой размерности c[i,j,k] = f( a[i,j], b[k] ) , чтобы для f некоторой функции.

Я знаю, что это, очевидно, можно сделать с помощью цикла for, но это кажется излишне громоздким. Есть ли более удобный (векторизованный) способ сделать это?

Ответ №1:

Это можно сделать с outer(a, b, f) помощью, например

 a <- array(1:6, dim=c(2,3))
b <- array(1:4, dim = 4)
outer(a, b, function(a, b) a   b/10)
#> , , 1
#> 
#>      [,1] [,2] [,3]
#> [1,]  1.1  3.1  5.1
#> [2,]  2.1  4.1  6.1
#> 
#> , , 2
#> 
#>      [,1] [,2] [,3]
#> [1,]  1.2  3.2  5.2
#> [2,]  2.2  4.2  6.2
#> 
#> , , 3
#> 
#>      [,1] [,2] [,3]
#> [1,]  1.3  3.3  5.3
#> [2,]  2.3  4.3  6.3
#> 
#> , , 4
#> 
#>      [,1] [,2] [,3]
#> [1,]  1.4  3.4  5.4
#> [2,]  2.4  4.4  6.4
 

Создано 2020-12-07 пакетом reprex (версия 0.3.0)

Обратите внимание, что outer() предполагается f , что он векторизован; если нет, передайте Vectorize(f) .