On Fri, Sep 18, 2009 at 8:12 AM, Schalk Heunis
<schalk.heu...@enerweb.co.za>wrote:

> Marcio
> Looking at the script (not much explanation re your intention), I think
> there is a couple of problems:
> 1. Not sure if the attached was supposed to be working code, but the
> assignment operator is <- not <=
> 2. The functions should be defined OUTSIDE the loop, otherwise you are
> redefining the function with every iteration
> 3. I think the reason you wanted to put it inside the loop is that you need
> access to the local variables of the loop, i.e. i and j
>     The way to do that would be to pass i and j as parameters to your
> function, for example
>
> g2 <- function(gen, j, i) sample (b1, 1, re = T)
>
> 4. Your function g1 returns a matrix and function g2 returns a number,
> these should ideally both return objects of the same dimension and class.  I
> think this is what you wanted
>
> g1 <- function(gen, j, i) {
>                 if (gen[j, i] == 0) al1 [i, 1] + al1 [i, 1]
>                 else if (gen [j, i] == 1) al1 [i, 1] +  al2 [i, 1]
>                 else if (gen [j, i] == 2) al2 [i, 1] +  al2 [i, 1]
>                 else 999
>                 }
>
> 5. To make people that respond's life easier, please also provide some code
> to initialise variables
>
> Here is working code, which I think does what you wanted:
> #######################################################
> # initialising some variables
> loc=200
> ind=1000
> gen <- matrix(rbinom(1000*200,1,0.3),nrow = ind,ncol = loc)
> al1 <- matrix(rbinom(1000*200,1,0.3),nrow = ind,ncol = loc)
> al2 <- matrix(rbinom(1000*200,1,0.3),nrow = ind,ncol = loc)
> b1 <- c(1,2,3)
> r2 = 0.7
> g <- matrix(nrow = ind,ncol = loc)
>
> # defining the functions
> g1 <- function(gen, j, i) {
>                 if (gen[j, i] == 0) al1 [i, 1] + al1 [i, 1]
>                 else if (gen [j, i] == 1) al1 [i, 1] +  al2 [i, 1]
>                 else if (gen [j, i] == 2) al2 [i, 1] +  al2 [i, 1]
>                 else 999
>                 }
> g2 <- function(gen, j, i) sample (b1, 1, re = T)
>
>  # now loop  - this can be done more efficiently, but did not want to
> change your code too much :-)
> for (i in 1 : loc) {
>     for (j in 1 : ind) {
>         xx <- if (runif(1) >= (1 - r2)) g1 else g2
>         g[j, i] <- xx(gen, j, i)
>     }
> }
>
>
> ##############################################################################
>
> HTH
> Schalk Heunis
>
>
>
> On Fri, Sep 18, 2009 at 4:50 AM, Marcio Resende 
> <mresende...@yahoo.com.br>wrote:
>
>>
>> I am new in R and i am having trouble here. I´ve already searched in the
>> list
>> but hasn´t helped
>> When i run this script above i get the message "Error in gen[j, i] :
>> incorrect number of dimensions". However gen is 1000x200 (ind x loc) and
>> so
>> is g
>>
>> could anybody help me
>>
>> for (i in 1 : loc) {      #loc=200
>> for (j in 1 : ind) {      #ind=1000
>>
>> g1 <= function ( gen ) matrix ( if (gen[j, i] == 0) al1 [i, 1] + al1 [i,
>> 1]
>> else if (gen [j, i] == 1) al1 [i, 1]       +  al2 [i, 1] else if  (gen [j,
>> i] == 2) al2 [i, 1] + al2 [i, 1] else 999, ncol = loc, nrow = ind)
>>
>>
>> g2 <= function ( gen ) sample (b1, 1, re = T)  #b1 is 1x3 and came from a
>> vector 1000X1 (e.g b1 <- c(x     [1000,1]...)
>>
>> xx <= if (runif (1) >= (1 - r2)) g1 else g2
>>
>> g [j, i] <= xx (gen [j, i])    #g was already generated as an 0 matrix
>> (1000x200) and i would like to replace ##by those functios
>>
>> }
>> }
>>
>> Thank you very much
>> --
>> View this message in context:
>> http://www.nabble.com/Incorrect-Dimension-tp25502336p25502336.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.
>>
>
>

        [[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.

Reply via email to