[R] change codes into loops
Hi, See example. for (i in 1:2) { for (j in 1:3) { b_1[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[1] b_2[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[2] b_3[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[3] } } The inner codes is really repeated, so i want to change the inner codes into loops. Take nn is from 1 to 3, something like, for (nn in 1:3) { b_nn[i,j]-rank(c(a1[i,j]:a3[i,j]))[nn] } Anybody can tell me the correct method to specify the above codes? Thanks. -- - Jane Chang Queen's [[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.
Re: [R] change codes into loops
On Jan 18, 2010, at 7:19 PM, rusers.sh wrote: Hi, See example. for (i in 1:2) { for (j in 1:3) { b_1[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[1] b_2[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[2] b_3[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[3] } } The inner codes is really repeated, so i want to change the inner codes into loops. Take nn is from 1 to 3, something like, for (nn in 1:3) { b_nn[i,j]-rank(c(a1[i,j]:a3[i,j]))[nn] } Anybody can tell me the correct method to specify the above codes? There is no correct method. You cannot index on the object name b_nn that way. R has not been developing using a syntax with that much flexibility. If you want a 3D array of values, then you could create b_ijn[i, j, nn] and make assignments to it. But if you tried to do this with paste and assign, you will spending considerably more time degbugging it than it is worth and it would likely be more inefficient than what you have. -- David. Thanks. -- - Jane Chang Queen's [[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. David Winsemius, MD Heritage Laboratories West Hartford, CT __ 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.
Re: [R] change codes into loops
If the number of datasets for a* is small (here is 3), it is ok for creating b_ijn[i, j, nn] and make assignments to it. But it will be a little bit impossible for a larger number of datasets for a*, say 999. We may need 999 lines to do this. Maybe there are other alternatives. 2010/1/18 David Winsemius dwinsem...@comcast.net On Jan 18, 2010, at 7:19 PM, rusers.sh wrote: Hi, See example. for (i in 1:2) { for (j in 1:3) { b_1[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[1] b_2[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[2] b_3[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[3] } } The inner codes is really repeated, so i want to change the inner codes into loops. Take nn is from 1 to 3, something like, for (nn in 1:3) { b_nn[i,j]-rank(c(a1[i,j]:a3[i,j]))[nn] } Anybody can tell me the correct method to specify the above codes? There is no correct method. You cannot index on the object name b_nn that way. R has not been developing using a syntax with that much flexibility. If you want a 3D array of values, then you could create b_ijn[i, j, nn] and make assignments to it. But if you tried to do this with paste and assign, you will spending considerably more time degbugging it than it is worth and it would likely be more inefficient than what you have. -- David. Thanks. -- - Jane Chang Queen's [[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. David Winsemius, MD Heritage Laboratories West Hartford, CT -- - Jane Chang Queen's [[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.
Re: [R] change codes into loops
On Jan 18, 2010, at 7:58 PM, David Winsemius wrote: On Jan 18, 2010, at 7:19 PM, rusers.sh wrote: Hi, See example. for (i in 1:2) { for (j in 1:3) { b_1[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[1] b_2[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[2] b_3[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[3] } } The inner codes is really repeated, so i want to change the inner codes into loops. Take nn is from 1 to 3, something like, Anybody can tell me the correct method to specify the above codes? There is no correct method. I take that back. You cannot index on the object name b_nn that way. R has not been developing using a syntax with that much flexibility. If you want a 3D array of values, then you could create b_ijn[i, j, nn] and make assignments to it. You could make a list of matrices: for (nn in 1:3) { bn[[nn]] - b[i,j] - rank(c(a1[i,j]:a3[i,j]))[nn] # assuming that your right hand construction is meaningful impossible to tell without an example. } But if you tried to do this with paste and assign, you will spending considerably more time degbugging it than it is worth and it would likely be more inefficient than what you have. -- David. Thanks. -- - Jane Chang Queen's [[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. David Winsemius, MD Heritage Laboratories West Hartford, CT __ 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. David Winsemius, MD Heritage Laboratories West Hartford, CT __ 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.
Re: [R] change codes into loops
On Jan 18, 2010, at 9:21 PM, rusers.sh wrote: If the number of datasets for a* is small (here is 3), it is ok for creating b_ijn[i, j, nn] and make assignments to it. But it will be a little bit impossible for a larger number of datasets for a*, say 999. We may need 999 lines to do this. Maybe there are other alternatives. Read more carefully. The b_ijn[ , , ] array can be pre-dimensioned to any size. You must know the size since you are specifying a loop range. 2010/1/18 David Winsemius dwinsem...@comcast.net On Jan 18, 2010, at 7:19 PM, rusers.sh wrote: Hi, See example. for (i in 1:2) { for (j in 1:3) { b_1[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[1] b_2[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[2] b_3[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[3] } } The inner codes is really repeated, so i want to change the inner codes into loops. Take nn is from 1 to 3, something like, for (nn in 1:3) { b_nn[i,j]-rank(c(a1[i,j]:a3[i,j]))[nn] } Anybody can tell me the correct method to specify the above codes? There is no correct method. You cannot index on the object name b_nn that way. R has not been developing using a syntax with that much flexibility. If you want a 3D array of values, then you could create b_ijn[i, j, nn] and make assignments to it. But if you tried to do this with paste and assign, you will spending considerably more time degbugging it than it is worth and it would likely be more inefficient than what you have. -- David. Thanks. -- - Jane Chang Queen's [[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. David Winsemius, MD Heritage Laboratories West Hartford, CT -- - Jane Chang Queen's [[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.
Re: [R] change codes into loops
You can do this... # Some random data: b_1 - b_2 - b_3 - matrix(,2,3) for(i in 1:3) eval(substitute(A - matrix(rnorm(6), 2), list(A=paste('a', i, sep='' # the loop for (i in 1:2) { for (j in 1:3) { for(k in 1:3) { eval(substitute(A[i,j] - rank(c(a1[i,j],a2[i,j],a3[i,j]))[k], list(A=as.symbol(paste('b_', k, sep='') } } } # For my own interest, I would have thought that: thingy - expression(A[i,j] - rank(c(a1[i,j],a2[i,j],a3[i,j]))[k]) for (i in 1:2) { for (j in 1:3) { for(k in 1:3) { eval(do.call('substitute', list(expr=thingy, env=list(A=as.symbol(paste('b_', k, sep='')) } } } # would have also worked, but it does not. Can someone please explain why not? Simon Knapp On Tue, Jan 19, 2010 at 1:41 PM, David Winsemius dwinsem...@comcast.netwrote: On Jan 18, 2010, at 9:21 PM, rusers.sh wrote: If the number of datasets for a* is small (here is 3), it is ok for creating b_ijn[i, j, nn] and make assignments to it. But it will be a little bit impossible for a larger number of datasets for a*, say 999. We may need 999 lines to do this. Maybe there are other alternatives. Read more carefully. The b_ijn[ , , ] array can be pre-dimensioned to any size. You must know the size since you are specifying a loop range. 2010/1/18 David Winsemius dwinsem...@comcast.net On Jan 18, 2010, at 7:19 PM, rusers.sh wrote: Hi, See example. for (i in 1:2) { for (j in 1:3) { b_1[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[1] b_2[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[2] b_3[i,j]-rank(c(a1[i,j],a2[i,j],a3[i,j]))[3] } } The inner codes is really repeated, so i want to change the inner codes into loops. Take nn is from 1 to 3, something like, for (nn in 1:3) { b_nn[i,j]-rank(c(a1[i,j]:a3[i,j]))[nn] } Anybody can tell me the correct method to specify the above codes? There is no correct method. You cannot index on the object name b_nn that way. R has not been developing using a syntax with that much flexibility. If you want a 3D array of values, then you could create b_ijn[i, j, nn] and make assignments to it. But if you tried to do this with paste and assign, you will spending considerably more time degbugging it than it is worth and it would likely be more inefficient than what you have. -- David. Thanks. -- - Jane Chang Queen's [[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. David Winsemius, MD Heritage Laboratories West Hartford, CT -- - Jane Chang Queen's [[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. [[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.