如何根据下标按元素为矩阵分配值?

3

我定义两个数字向量如下:

> x <- c(1,2)
> y <- c(1,2)

现在我想要一个2x2的矩阵,填入xy元素按照它们的下标相加的结果,因此最终的结果应该如下所示:
     [,1] [,2]
[1,]    2    3
[2,]    3    4

使用嵌套的for循环可以很容易实现此目的,但在大数据集上无法高效运行。尝试使用例如

> z <- matrix(nrow=2, ncol=2)
> z[x,y] <- x + y

这段代码会失败,因为+运算符在将xy作为向量相加之前就将它们相加并赋值给了z。使用明确的下标ij也会失败:

> i <- 1:2
> j <- 1:2
> z[i,j] <- x[i] + y[j]
> z
     [,1] [,2]
[1,]    2    2
[2,]    4    4

有没有使用向量化/下标方式实现我想要的功能的方法,或者我只能使用嵌套的for循环或其中一个apply函数?
1个回答

4
也许你正在寻找 outer 函数?
outer(x,y,"+")

这将会给予:

     [,1] [,2]
[1,]    2    3
[2,]    3    4

1
太好了,我不知道你可以在任何函数中使用outer()。刚刚检查了一下,它的运行速度比嵌套的for循环快大约100倍(使用简单的元素加法)。 - Jonatan Samoocha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接