hi,
I'm new to reference classes but as I have experience with python I
decided to port some of my code in this frame work.
I have the following two reference classes in separate files:
#1#
uvRndVar = setRefClass(
Class = 'uvRndVar',
fields = list(
desc = 'character',
type = 'character',
pars = 'list',
MAP = c('numeric'),
post = c('numeric')
),
methods = list(
initialize = function (desc, type, pars) {
types = c('norm', 'lnorm', 'beta', 'gamma')
parameters = list(norm = c('mean', 'sd'), lnorm = c('mean',
'sd'),
beta = c('shape1', 'shape2'), gamma = c('shape', 'rate'))
if (!any(types == type)) {
stop('not correct type provided')
} else {
if (length(names(pars)) == length(parameters[[type]])) {
for (i in 1:length(names(pars))) {
a = which(parameters[[type]] == names(pars)[i])
if (length(a)) {
parameters[[type]] = parameters[[type]][-a]
} else {
stop(paste('parameter', names(pars)[i],
'not compatible with provided type'))
}
}
.self$desc = desc
.self$type = type
.self$pars = pars
.self$MAP = NaN
.self$post = NaN
} else {
stop('parameter list provided has wrong length')
}
}
}
)
)
#2#
NG = setRefClass(
Class = 'NG',
fields = list(
Y = 'matrix',
X = 'matrix',
CvFun = 'Cf',
CfHp = 'list',
lam = 'uvRndVar',
lam.upd = 'logical',
A = 'array',
basis = 'matrix',
Y.star = 'matrix',
X.star = 'matrix',
lam.star = 'numeric',
lam.star.upd = 'logical',
A.star = 'matrix'
),
methods = list(
initialize = function (Y, X, Cf, CfHp, lam, A, basis) {
if (nrow(Y) != nrow(X)) {
stop('X and Y have different numbers of rows')
} else if (dim(A)[1] != dim(A)[2]) {
stop('A is not a square matrix')
} else if (dim(A)[1] != nrow(basis)) {
stop('basis matrix and precision matrix A have
different number of rows')
} else if (dim(A)[3] != nrow(X)) {
stop('dim(A)[3] != nrow(X)')
} else if (ncol(basis) != ncol(Y)) {
stop('basis matrix and Y have different number of columns')
} else {
CvFun$checkModel(Y, X, CfHp)
}
.self$q = ncol(Y)
.self$m = nrow(X)
.self$p = ncol(X)
.self$n = nrow(basis)
.self$Y = Y
.self$X = X
.self$CvFun = CvFun
.self$CfHp = CfHp
.self$lam = lam
.self$A = A
.self$basis = basis
}
)
)
the second takes an object of the first class in two of its fields. I
load the first class and then the second with the 'source' command, but
then I got this error which i don't understand:
Error in match(x, table, nomatch = 0L) :
argument "type" is missing, with no default
I'm working with Ubuntu 12.04 and R 3.0.2.
Any suggestions about what is going wrong?
Thanks in advance,
Filippo
______________________________________________
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.