Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add all elements in matrix R

Tags:

r

matrix

I am trying to add all the elements in a matrix. This is an example of my matrix (the actual matrix is bigger):

 m = matrix(c(528,479,538,603),nrow=2,ncol=2)
 m
                   A            B
male              528          538
female            479          603

I am trying to do:

 sum.elements = colSums(colSums(m))

but it gives the following error:

Error in colSums(colSums(m)) : 'x' must be an array of at least two dimensions

I have tried doing:

x = colSums(m)
sum.elements = x[1] + x[2]

but this would be very long when you have a 100-column matrix...

Any help would be greatly appreciated!

like image 579
Ignacio de Castro Avatar asked May 16 '15 16:05

Ignacio de Castro


People also ask

How to add a value to a particular matrix element in R?

How to add a value to a particular matrix element in R? To add a value to a particular matrix element in R, we can use subsetting for the particular value with single square brackets. For Example, if we have a matrix called M and we want to add 10 to the fifth value in second column then can use the below mentioned command −

How to add 5 to each row in a matrix?

Here you have every possibility: x <- matrix(1:9, 3, 3) add 5 to column 1: x[, 1] + 5 add 5 to row 1: x[1, ] + 5 add 1 to the first row, 2 to second, 3 to third: x + 1:3 the same with columns: t(t(x) + 1:3) add 5 to all the cells: x + 5 Share Cite Improve this answer Follow answered Dec 4 '14 at 13:31 Tim♦Tim

How to apply a function to each element of a matrix?

We can apply a function to each element of a Matrix, or only to specific dimensions, using apply (). apply (X, MARGIN, FUN, ...) MARGIN is a vector giving the subscripts which the function will be applied over. For a matrix 1 indicates rows, 2 indicates columns, c (1,2) indicates rows and columns.

How to transpose a matrix in R?

A common operation with matrix is to transpose it. This can be done with the function t (). We can add row or column using rbind () and cbind () function respectively. Similarly, it can be removed through reassignment.


2 Answers

You can do sum. It also has the option na.rm to remove the NA values.

 sum(m)
 #[1] 2148

In general, sum works for vector, matrix and data.frame

Benchmarks

 set.seed(24)
 m1 <- matrix(sample(0:20, 5000*5000, replace=TRUE), ncol=5000)
 system.time(sum(m1))
 #  user  system elapsed 
 # 0.027   0.000   0.026 

 system.time(sum(colSums(m1)))
 # user  system elapsed 
 # 0.027   0.000   0.027 

 system.time(Reduce('+', m1))
 #  user  system elapsed 
 #25.977   0.644  26.673 
like image 102
akrun Avatar answered Oct 14 '22 06:10

akrun


Reduce will work

 Reduce(`+`,m)
    [1] 2148
like image 27
Metrics Avatar answered Oct 14 '22 08:10

Metrics