Dear R Users,

 

I have a couple of proto objects like:

 

wedge <- proto(expr={

    start.year <- 2008

    end.year <- 2050

})

 

star.rating <- wedge$proto(

    star = c(4, 5, 8, 10),

    gain = c(0, .3, .5, .7),

    cost = c(0, 2100, 4000, 7500),

    

    star.rating <- function(., year) 6.0,

 

    setup = function(.){

        .$cost.for.star <- approxfun(.$star, .$cost)

        .$gain.for.star <- approxfun(.$star, .$gain)

    },

 

    test = function(., year) {

        gs <- .$with(gain.for.star)(.$star.rating(year))

    }

)

 

 

 

And a function to create and modify 'instances':

 

create.star.rating <- function(switch.years, star.ratings) {

    res <- star.rating$proto(switch.years = switch.years, star.ratings =
star.ratings)

    res$setup()

    res

}

 

 

When I use them as follows:

ee <- create.star.rating(ratings, switch.years)

ee$test(2009)

 

 

The second line gives me the error message:

"Error in .$with(gain.for.star)(.$star.rating(year)) : 

   object "y" not found"

 

I understand why this happens (when objects are inserted into a proto
their environment is set to that of the proto)... but I can't figure out
how to get around it!

 

I have tried setting the environments of the functions created in setup
as follows:

 

setup = function(.){

        t1 <- approxfun(.$star, .$cost)

        t2 <- approxfun(.$star, .$gain)

        .$cost.for.star <- t1

        .$gain.for.star <- t2

        environment(.$cost.for.star) <- environment(t1)

        environment(.$gain.for.star) <- environment(t2)

    }

 

 

But then I get the error:

"Error in get("gain.for.star", env = `*tmp*`, inherits = TRUE) : 

  object "*tmp*" not found"

 

 

Which I think occurs because the last two lines in 'setup' only create
references to their respective environments which disappear on exit of
'setup'.

 

 

 

Any ideas?

 

Regards,

Simon Knapp.

 


	[[alternative HTML version deleted]]


