2017-04-19 72 views
1

这应该是容易的,但我想不出一个更优雅的方式来创建一个附加表,如:如何在R中创建加法表?

x <- 1:3 
cbind(x + x[1], x + x[2], x + x[3]) 

    [,1] [,2] [,3] 
[1,] 2 3 4 
[2,] 3 4 5 
[3,] 4 5 6 

我试过的lapply()各种版本无济于事。

+3

您正在寻找外。 '外部(x,x,'+')' – Sotos

+0

@Sotos,migt是'outer(1:3,1:3,“+”)' –

+0

@ d.b与Sotos所说的不一样吗? –

回答

3

您可以使用outersapplyexpand.grid(结合rowSums

x = 1:3 
outer(x, x, "+") 
#  [,1] [,2] [,3] 
#[1,] 2 3 4 
#[2,] 3 4 5 
#[3,] 4 5 6 

sapply(seq_along(x), function(i) sapply(seq_along(x), function(j) x[i]+x[j])) 
#  [,1] [,2] [,3] 
#[1,] 2 3 4 
#[2,] 3 4 5 
#[3,] 4 5 6 

matrix(rowSums(expand.grid(x, x)), ncol = length(x)) 
#  [,1] [,2] [,3] 
#[1,] 2 3 4 
#[2,] 3 4 5 
#[3,] 4 5 6 
2

你可以这样做:

m <- diag(length(x)) 
m[] <- x[col(m)] + x[row(m)] 

#  [,1] [,2] [,3] 
#[1,] 2 3 4 
#[2,] 3 4 5 
#[3,] 4 5 6 

OR

matrix(x,length(x),length(x),byrow = TRUE) + x