How to make an array in R that its entries are equal to i * j? [closed]

1

I want a generic array 10x10 , that its entries are equal to i*j , where i is the column and j the line

    
asked by anonymous 02.10.2015 / 19:10

2 answers

5

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
    
02.10.2015 / 20:01
3

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.

    
02.10.2015 / 19:51