[R-gui] gWidgetsRGtk2: Problem with gradio handler in a proto object

Gabor Grothendieck ggrothendieck at gmail.com
Fri May 13 15:33:40 CEST 2011


On Fri, May 13, 2011 at 7:52 AM, John Verzani <verzani at math.csi.cuny.edu> wrote:
> Dear Yvonnick and Gabor,
> I use a different implementation for each, but this gave me some place to
> look. For gradio for gWidgetsRGtk2 I decoupled the handler call from the
> widget so replacing radio buttons was easier. The R5 class I made, for some
> reason, doesn't play nicely with this proto object. Here is a simplified
> example:
> library(proto)
> a <- setRefClass("Test",
>                  fields=list(
>                    o = "function"
>                    ),
>                  methods=list(
>                    initialize=function(o) {
>                      o <<- o
>                    }))
> example = proto(
>  create = function(.) {
>    a$new(.$onChoice)
>  },
>  onChoice = function(.,h,...) {
>    print("hi")
>  }
> )
>
> When setting the "o" property R tries coercion to a function and you get
> this error.
> Gabor, any thoughts? This deep dark magic is one of your many specialities.

The class vector of .$onChoice is c("instantiatedProtoMethod",
"function").  It seems the reference class mechanism won't let you
refer to it as "function".  Also, the initialize method needs to have
an appropriate return value.

This seems to work for me where the ## lines are new or modified:

library(proto)
setClass("instantiatedProtoMethod")
a <- setRefClass("Test",
                 fields=list(
                   o = "instantiatedProtoMethod" ##
                   ),
                 methods=list(
                   initialize=function(o) {
                     initFields(o = o) ##
                   }))

example = proto(
 create = function(.) {
   a$new(.$onChoice)
 },
 onChoice = function(.,h,...) {
   print("hi")
 }
)
example$create()$o() ##

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-SIG-GUI mailing list