[R] beginner's loop issue
Paul Johnson
pauljohn32 at gmail.com
Tue Mar 13 20:53:22 CET 2012
On Tue, Mar 13, 2012 at 11:27 AM, aledanda <danda.galli at 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
More information about the R-help
mailing list