On Tue, Mar 13, 2012 at 11:27 AM, aledanda <

[hidden email]> 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______________________________________________

[hidden email] mailing list

https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide

http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.