[R] R class accessor problem in 2.6

Joseph Wang joe at gnacademy.org
Sun Feb 3 23:42:10 CET 2008


I was able to track down the problem that causes R-Swig to fail in 2.6.

In 2.5, I am able to use the set method against '$' and '$<-' to cause 
expressions like r$d to get dispatched to get and set functions.  This no 
longer seems to work in 2.6, and I was wondering if anyone can give 
information as why.

The function that are failing are at the end of this e-mail.  In 2.5 a 
function like r$d would get dispatched to A_d_get(r). but in 2.6 it returns a 
NULL.

# Start of accessor method for A
setMethod('$', '_p_A', function(x, name)

{
  print('foo')
  accessorFuns = list('i' = A_i_get, 'ui' = A_ui_get, 'd' = A_d_get, 'str' = 
A_str_get, 'tmp' = A_tmp_get)
  vaccessors = c('i', 'ui', 'd', 'str', 'tmp')
  idx = pmatch(name, names(accessorFuns))
  if(is.na(idx)) 
  return(callNextMethod(x, name))
  f = accessorFuns[[idx]]
  formals(f)[[1]] = x
  if (is.na(match(name, vaccessors))) f else f(x)
}


)
# end of accessor method for A
# Start of accessor method for A
setMethod('$<-', '_p_A', function(x, name, value)

{
  accessorFuns = list('i' = A_i_set, 'ui' = A_ui_set, 'd' = A_d_set, 'str' = 
A_str_set, 'tmp' = A_tmp_set)
  idx = pmatch(name, names(accessorFuns))
  if(is.na(idx)) 
  return(callNextMethod(x, name, value))
  f = accessorFuns[[idx]]
  f(x, value)
  x
}



More information about the R-help mailing list