Abdel
Abdel

Reputation: 6116

R: a for statement wanted that allows for the use of values from each row

I'm pretty new to R..

I'm reading in a file that looks like this:

1 2 1
1 4 2
1 6 4

and storing it in a matrix:

matrix <- read.delim("filename",...)

Does anyone know how to make a for statement that adds up the first and last numbers of one row per iteration ?

So the output would be:

2
3
5

Many thanks!

Edit: My bad, I should have made this more clear... I'm actually more interested in an actual for-loop where I can use multiple values from any column on that specific row in each iteration. The adding up numbers was just an example. I'm actually planning on doing much more with those values (for more than 2 columns), and there are many rows.

So something in the lines of:

for (i in matrix_i) #where i means each row
{
#do something with column j and column x from row i, for example add them up
}

Upvotes: 0

Views: 8284

Answers (4)

Gregor Thomas
Gregor Thomas

Reputation: 146154

You probably can use an apply function or a vectorized approach --- and if you can you really should, but you ask for how to do it in a for loop, so here's how to do that. (Let's call your matrix m.)

results <- numeric(nrow(m))
for (row in nrow(m)) {
    results[row] <- m[row, 1] + m[row, 3]
}

Upvotes: 1

IRTFM
IRTFM

Reputation: 263481

This is probably one of those 100 ways to skin a cat questions. You are perhaps looking for the rowSums function, although you might also find many answers using the apply function.

Upvotes: 0

Tony Breyal
Tony Breyal

Reputation: 5378

Something along these lines should work rather efficiently (i.e. this is a vectorised approach):

m <- matrix(c(1,1,1,2,4,6,1,2,4), 3, 3)
#      [,1] [,2] [,3]
# [1,]    1    2    1
# [2,]    1    4    2
# [3,]    1    6    4

v <- m[,1] + m[,3]
# [1] 2 3 5

Upvotes: 4

David Robinson
David Robinson

Reputation: 78630

If you want to get a vector out of this, it is simpler (and marginally computationally faster) to use apply rather than a for statement. In this case,

sums = apply(m, 1, function(x) x[1] + x[3])

Also, you shouldn't call your variables "matrix" since that is the name of a built in function.

ETA: There is an even easier and computationally faster way. R lets you pull out columns and add them together (since they are vectors, they will get added elementwise):

sums = m[, 1] + m[, 3]

m[, 1] means the first column of the data.

Upvotes: 4

Related Questions