Re: [R] beginner's loop issue
Thank you all for your helpful comments! I solved my problem by creating an empty matrix before the loop and adjusting the loop itself, this is the code: size - dim(input) out - matrix('',nrow =size[1], ncol = 9) for (i in 1:nrow(input)) { out[i,1:3] - unlist(MyFunction(input[i,1],input[i,2], input[i,3]) out[i,4:6] - unlist(MyFunction(input[i,5],input[i,7], input[i,6]) out[i,7:9] - unlist(MyFunction(input[i,8],input[i,10], input[i,9]) } It's probably not the most efficient way of doing it but it gives me the desired output matrix... Thanks for pointing me to this pdf R inferno pdf, I had an old version of it.. I'm, starting to use R again after long time and this is a very useful guide! All the best Ale -- View this message in context: http://r.789695.n4.nabble.com/beginner-s-loop-issue-tp4469514p4471352.html Sent from the R help mailing list archive at Nabble.com. __ 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.
[R] beginner's loop issue
Dear All, I hope you don't mind helping me with this small issue. I haven't been using R in years and I'm trying to fill in a matrix with the output of a function (I'm probably using the Matlab logic here and it's not working). Here is my code: for (i in 1:length(input)){ out[i,1:3] - MyFunction(input[i,1],input[i,2], input[i,3]) out[i,4:6] - MyFunction(input[i,5],input[i,7], input[i,6]) out[i,7:9] - MyFunction(input[i,8],input[i,10], input[i,9]) } 'input' is a matrix dim(input) [1] 46 10 and each raw corresponds to a different subject. The error I get here is /Error in out[i, 1:3] - get.vaTer(input[i, 2], input[i, 4], input[i, 3], : object 'out' not found/ So I wonder, what's wrong in the assignment to the variable out? Should I define the variable before the loop? Thanks for your help Best Ale -- View this message in context: http://r.789695.n4.nabble.com/beginner-s-loop-issue-tp4469514p4469514.html Sent from the R help mailing list archive at Nabble.com. __ 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] beginner's loop issue
Yes, the short answer is that you need to define out before running the loop. The most effective way to do so will be to set up a matrix with the exact right dimensions (if you know them up front); something like out - matrix(NA, nrow = length(input), ncol = 9) Michael On Tue, Mar 13, 2012 at 12:27 PM, aledanda danda.ga...@gmail.com wrote: Dear All, I hope you don't mind helping me with this small issue. I haven't been using R in years and I'm trying to fill in a matrix with the output of a function (I'm probably using the Matlab logic here and it's not working). Here is my code: for (i in 1:length(input)){ out[i,1:3] - MyFunction(input[i,1],input[i,2], input[i,3]) out[i,4:6] - MyFunction(input[i,5],input[i,7], input[i,6]) out[i,7:9] - MyFunction(input[i,8],input[i,10], input[i,9]) } 'input' is a matrix dim(input) [1] 46 10 and each raw corresponds to a different subject. The error I get here is /Error in out[i, 1:3] - get.vaTer(input[i, 2], input[i, 4], input[i, 3], : object 'out' not found/ So I wonder, what's wrong in the assignment to the variable out? Should I define the variable before the loop? Thanks for your help Best Ale -- View this message in context: http://r.789695.n4.nabble.com/beginner-s-loop-issue-tp4469514p4469514.html Sent from the R help mailing list archive at Nabble.com. __ 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. __ 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] beginner's loop issue
On Tue, Mar 13, 2012 at 11:27 AM, aledanda danda.ga...@gmail.com wrote: Dear All, I hope you don't mind helping me with this small issue. I haven't been using R in years and I'm trying to fill in a matrix with the output of a function (I'm probably using the Matlab logic here and it's not working). Here is my code: for (i in 1:length(input)){ out[i,1:3] - MyFunction(input[i,1],input[i,2], input[i,3]) out[i,4:6] - MyFunction(input[i,5],input[i,7], input[i,6]) out[i,7:9] - MyFunction(input[i,8],input[i,10], input[i,9]) } 'input' is a matrix dim(input) [1] 46 10 and each raw corresponds to a different subject. The error I get here is /Error in out[i, 1:3] - get.vaTer(input[i, 2], input[i, 4], input[i, 3], : object 'out' not found/ out has to exist first, as previous commenter said. Furthermore, suggestions: Consider making MyFunction accept a vector of 3 arguments, rather than separate arguments. Consider making out 3 columns, as in out - matrix(0, nrow=N, ncol=3) for(i ...){ out[i,1:3] - MyFunction(input[i,1:3]) out[i,1:3] - MyFunction(input[i,4:6]) out[i,1:3] - MyFunction(input[i,7:9]) } If you could re-shape your input thing as a list with one element that needs to go into MyFunction, this could get easier still: lapply(input, MyFunction) or if input were an array with 3 columns, you could revise MyFuntion to accept a 3-vector. apply(input, 1, MyFunction) Hardly ever in R does one need to specify inputs as you have done in your example. pj -- Paul E. Johnson Professor, Political Science Assoc. Director 1541 Lilac Lane, Room 504 Center for Research Methods University of Kansas University of Kansas http://pj.freefaculty.org http://quant.ku.edu __ 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.