Я хочу передать несколько параметров одновременно функции, где эти параметры являются векторами, содержащимися в такой матрице:
> head(M, 3)
[,1] [,2] [,3]
[1,] 1.3709584 1.304870 -0.3066386
[2,] -0.5646982 2.286645 -1.7813084
[3,] 0.3631284 -1.388861 -0.1719174
Например, с учетом cor()
следующая строка дает мне то, что яхочу, но не хочу вложения.
> sapply(1:3, function(x) sapply(1:3, function(y, ...) cor(M[, x], M[, y])))
[,1] [,2] [,3]
[1,] 1.0000000 -0.3749289 0.4400510
[2,] -0.3749289 1.0000000 -0.1533438
[3,] 0.4400510 -0.1533438 1.0000000
Я думал, что outer()
будет кандидатом, поскольку:
> outer(1:3, 1:3, function(x, y) x + y)
[,1] [,2] [,3]
[1,] 2 3 4
[2,] 3 4 5
[3,] 4 5 6
Но
corFun <- function(x, y) cor(M[, x], M[, y])
outer(1:3, 1:3, corFun)
не сработаетmapply(corFun, M[, 1], M[, 2])
попытки тоже не сработают.
Я хочу сделать xFun(corFun, M, arg)
или даже лучше xFun(cor, M, arg)
, который дает (как указано выше):
[,1] [,2] [,3]
[1,] 1.0000000 -0.3749289 0.4400510
[2,] -0.3749289 1.0000000 -0.1533438
[3,] 0.4400510 -0.1533438 1.0000000
, где arg <- combn(1:3, 2)
или arg <- t(expand.grid(1:3, 1:3))
.
Вообще мне интересно, существует ли существующая базовая функция R что-то вроде xFun(FUN, ..., arg)
, которая передает матрицу параметров arg
с dim(arg)[1] == 2
по столбцам в функцию FUN = function(x, y)
или, возможно, дажев более общем плане dim(arg)[1] == length(formals(FUN))
.
Данные:
set.seed(42)
M <- matrix(rnorm(30), 10, 3)