Coster, Albart [EMAIL PROTECTED] writes:
Dear list,
I am trying to write a package for simulating meioses in R. We defined
a class 'haplotype' which contains the basic units of our simulation:
setClass(haplotype,representation(snp = numeric,qtl = list, hID
= numeric,phID0 = numeric,phID1 = numeric), prototype = list(hID
= 0,phID0 = NaN,phID1 = NaN))
In addition, we define a class 'haploList', which is just a list of
haplotypes:
setClass(haploList,contains = list,representation(genDist =
numeric,roundDec = integer))
Most things work fine, but when subsetting a haploList object an
object of class list is returned. I realize that I need to write a
function for subsetting this new object, and tried to find the code
for '[.listof' or something similar could not find it, probably due to
a suboptimal understanding of how it is organized.
My question is, how could I define a extraction function for my new
class that uses all the existing functionality of the Extract function
for list?
You can find out what the generic looks like
getGeneric([)
standardGeneric for [ defined from package base
function (x, i, j, ..., drop = TRUE)
standardGeneric([, .Primitive([))
environment: 0xfc17a8
Methods may be defined for arguments: x, i, j, drop
Use showMethods([) for currently available ones.
and then write method(s) for your class:
setMethod([,
signature=signature(x=haploList, i=ANY, j=missing),
function(x, i, j, ..., drop=TRUE) {
## update and return x
[EMAIL PROTECTED] - [EMAIL PROTECTED], drop=drop]
x
})
Note though that extending 'list' has hazards, e.g.,
hlst - new(haploList, list(a=1,b=2))
names(hlst)
[1] a b
names(hlst[2])
[1] a
where the names have been confused! You'll want to manage the names
yourself (as a separate slot) or make sure that they're removed
entirely when you create / update your object.
(Here's a variant that I like
setMethod([,
signature=signature(x=haploList, i=ANY, j=missing),
function(x, i, j, ..., drop=TRUE) {
## feed updated values to 'initialize'
initialize(x, [EMAIL PROTECTED])
})
because the initialize call will [provided any initialize methods
defined on contained classes don't interfer] minimize copying. You'll
also likely want methods for $ and [[, and assignment methods [-
etc.)
Hope that helps,
Martin
Thanks in advance,
Albart Coster __
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
--
Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M2 B169
Phone: (206) 667-2793
__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel