user1609391
user1609391

Reputation: 455

Learning R - What is this Function Doing?

I am learning R and reading the book Guide to programming algorithms in r.

The book give an example function:

# MATRIX-VECTOR MULTIPLICATION
matvecmult = function(A,x){
    m = nrow(A)
    n = ncol(A) 
    y = matrix(0,nrow=m)
    for (i in 1:m){
        sumvalue = 0        
        for (j in 1:n){
            sumvalue = sumvalue + A[i,j]*x[j]
        }
        y[i] = sumvalue
    }
    return(y)
}

How do I call this function in the R console? And what exactly is passing into this function A, X?

Upvotes: 0

Views: 76

Answers (3)

tegancp
tegancp

Reputation: 1202

This function is designed to return the product of a matrix A with a vector x; i.e. the result will be the matrix product A x (where - as is usual in R, the vector is a column vector). An example should make things clear.

# define a matrix
mymatrix <- matrix(sample(12), nrow <- 4) 

# see what the matrix looks like
mymatrix

#       [,1] [,2] [,3]
# [1,]    2   10    9
# [2,]    3    1   12
# [3,]   11    7    5
# [4,]    8    4    6

# define a vector where multiplication of our matrix times the vector will be defined
vec3 <- c(-1,0,1)

# apply the function to our matrix and vector
result <- matvecmult(mymatrix, vec3) 
result
#       [,1]
# [1,]    7
# [2,]    9
# [3,]   -6
# [4,]   -2

class(result)
# [1] "matrix"

So matvecmult(mymatrix, vec3) is how you would call this function, and the result is an n by 1 matrix, where n is the number of rows in the matrix argument.

You can also get some insight by playing around and seeing what happens when you pass something other than a matrix-vector pair where the product is defined. In some cases, you will get an error; sometimes you get nonsense; and sometimes you get something you might not expect just from the function name. See what happens when you call matvecmult(mymatrix, mymatrix).

Upvotes: 1

Buzz Lightyear
Buzz Lightyear

Reputation: 844

The function is calculating the product of a Matrix and a column vector. It assumes both the number of columns of the matrix is equal to the number of elements in the vector.

It stores the number of columns of A in n and number of rows in m.

It then initializes a matrix of mrows with all values as 0.

It iterates along the rows of A and multiplies each value in each row with the values in x.

The answer is the stored in y and finally it returns the single column matrix y.

Upvotes: 0

Daniel
Daniel

Reputation: 7832

The function takes an argument A, which should be a matrix, and x, which should be a numeric vector of same length as values per row in A.

If

A <- matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3)

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

then you have 3 values (number of columns, ncol) per row, thus x needs to be something like

x <- c(4,5,6)

The function itself iterates all rows, and in each row, each value is multiplied with a value from x, where the value in the first column is multiplied with the first value in x, the value in As second column is multiplied with the second value in x and so on. This is repeated for each row, and the sum for each row is returned by the function.

matvecmult(A, x)

     [,1]
[1,]   49 # 1*4 + 3*5 + 5*6
[2,]   64 # 2*4 + 4*5 + 6*6

To run this function, you first have to compile (source) it and then consecutively run these three code lines:

A <- matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3)
x <- c(4,5,6)
matvecmult(A, x)

Upvotes: 3

Related Questions