R:外部,矩阵和矢量化

时间:2014-01-30 00:28:17

标签: r matrix

我想更好地了解外部工作以及如何对函数进行矢量化。下面是我想要做的最小例子:我有一组数字2,3,4。对于每个组合(a,b),在对角线上创建一个带有a a b b b的对角矩阵,然后用它做一些事情,例如计算其行列式(这仅用于演示目的)。计算结果应写成3乘3矩阵,每个组合一个字段。

以下代码无效 - 显然,outer(或my.func)并不理解我不希望应用整个lambdas向量 - 您可以当您取消注释包含的print命令时,就会发现这种情况。

lambdas <- c(1:2)
my.func <- function(lambda1,lambda2){
# print(diag(c(rep(lambda1,2),rep(lambda2,2))))
 det(diag(c(rep(lambda1,2),rep(lambda2,2))))
}
det.summary <- outer(lambdas,lambdas, FUN="my.func")

我如何修改我的功能或外部调用,这样的事情就像我想要的那样?

我想我需要以某种方式对我的函数进行向量化,但我不知道如何以及以何种方式处理外部调用。

编辑: 我已经改变了矩阵的大小,使它变得不那么混乱。我想生成4个对角4乘4矩阵,以下对角线; in括号中的相应参数lambda1, lambda2

1 1 1 1 (1,1)1 1 2 2 (1,2)2 2 1 1 (2,1)2 2 2 2 (2,2)

然后,我想计算它们的决定因素(这是一个任意选择)并将结果放入矩阵,其第一列对应lambda1=1,第二列对应lambda1=2,行对应于lambda2的选择。 det.summary应为2到矩阵,并带有以下值:

1 4
4 16

因为这些是上面列出的对角矩阵的决定因素。

1 个答案:

答案 0 :(得分:3)

你知道吗,有一个Vectorize函数(大写“V”)!

outer(lambdas,lambdas, Vectorize(my.func))
#      [,1] [,2]
# [1,]    1    4
# [2,]    4   16

正如你想出来的那样(因为我花了一些时间才弄明白)outer要求函数被矢量化。在某些方面,它与*pply函数相反,它通过依次为每个值提供运算符/函数来有效地向量化操作。但如上所示,这很容易处理。