On Oct 13, 2010, at 5:20 PM, Julia Lira wrote:
Dear all,
I need to do a loop as following:
#Consider a matrix:
M <- matrix(1, nrow=10, ncol=20)
#Matrices to store the looping results
M1 <- matrix(0, nrow=10, ncol=400)
h <- c(1:20/1000)
#loop
# (I've seen more informative comments)
for (j in h){
M1 <- M/(2*j)
}
But this means that the first 20 columns of matrix M1 (that is,
columns 1:20) should show the results of M/(2*0.001).
Why would you think that?
Then, the following 20 columns of M1 (that is, columns 21:40) should
show the results of M/(2*0.002) and so on until columns 381:400 that
would show the results of M/(2*0.02).
Dividing a matrix by a scalar produces a matrix of the _same_
dimensions. You overwrote the M1 matrix 20 times and ended up with the
results of only the last iteration.
What should I include in the loop above in order to have this result?
Use an indexing strategy that limits the assignment to the particular
columns targeted.
Perhaps (although I forgot the factor of 2):
for (j in 1:20) {
M1[ ,(20*j -19):(20*j) <- rep(M1[,j]/h[j], 20) }
> for (j in 1:20) {
+ M1[ ,(20*j -19):(20*j)] <- rep(M[,j]/h[j], 20) }
> str(M1)
num [1:10, 1:400] 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 ...
> M1[1,21]
[1] 500
> M1[1,41]
[1] 333.3333
--
David
Thanks a lot!
Julia
[[alternative HTML version deleted]]
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.