I want a generic array 10x10
, that its entries are equal to i*j
, where i
is the column and j
the line
I want a generic array 10x10
, that its entries are equal to i*j
, where i
is the column and j
the line
An alternative to applying a function to all combinations of 2 vectors is the outer()
function. In case:
> outer(1:10, 1:10, '*')
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 2 3 4 5 6 7 8 9 10
[2,] 2 4 6 8 10 12 14 16 18 20
[3,] 3 6 9 12 15 18 21 24 27 30
[4,] 4 8 12 16 20 24 28 32 36 40
[5,] 5 10 15 20 25 30 35 40 45 50
[6,] 6 12 18 24 30 36 42 48 54 60
[7,] 7 14 21 28 35 42 49 56 63 70
[8,] 8 16 24 32 40 48 56 64 72 80
[9,] 9 18 27 36 45 54 63 72 81 90
[10,] 10 20 30 40 50 60 70 80 90 100
You can do this like this:
> x <- matrix(rep(1:10, each = 10), ncol = 10, byrow = T)
> apply(x, 1, function(x) x*1:10)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 2 3 4 5 6 7 8 9 10
[2,] 2 4 6 8 10 12 14 16 18 20
[3,] 3 6 9 12 15 18 21 24 27 30
[4,] 4 8 12 16 20 24 28 32 36 40
[5,] 5 10 15 20 25 30 35 40 45 50
[6,] 6 12 18 24 30 36 42 48 54 60
[7,] 7 14 21 28 35 42 49 56 63 70
[8,] 8 16 24 32 40 48 56 64 72 80
[9,] 9 18 27 36 45 54 63 72 81 90
[10,] 10 20 30 40 50 60 70 80 90 100
First I create a x
array with all rows equal to the 1, 2, 3,.., 10
vector.
Then using the apply
function, multiply each line by vector 1:10. Note that in R, when you multiply vectors, it multiplies element by element, so this account works.
Another way to do this would be to create the array x
with all columns being 1,2,3, .., 10
. And then multiply it by vector 1:10. This will also work, but it is less intuitive because it depends on an important R concept, called recycling.
x <- matrix(rep(1:10, each = 10), ncol = 10)
x*1:10
As @mgibsonbr commented, in the next few questions try to explain a little more what you tried, and exactly what you are not getting.