[EMAIL PROTECTED] writes:
> Sorry Martin. I had that line in my actual code. It did not work. I
> looked around all the google but it doesn't seem to have answer to
> this. Any ideas? Thank you.
A more complete solution -- remember to return 'this' throughout (R is
'pass by value' rather than pass by reference, so changes inside
functions are only changes to the _local_ definition). Some of this is
only guessing at your intention...
setClass("Foo",
representation(x="data.frame", y="character"))
setGeneric("setX<-",
function(this, value) standardGeneric("setX<-"))
setReplaceMethod("setX",
signature=signature("Foo", "data.frame"),
function(this,value) {
[EMAIL PROTECTED] <- value
this
})
setGeneric("generateFrame",
function(this) standardGeneric("generateFrame"))
## generateFrame seems like it is not meant to be a replacement method
setMethod("generateFrame",
signature=signature(this="Foo"),
function(this) {
frame <- data.frame(x=letters[1:5], y=letters[5:1])
setX(this) <- frame # modifies [EMAIL PROTECTED]
this # return 'this', an object of class Foo
})
foo <- function() {
objFoo <- new("Foo", x=data.frame(NULL), y="")
cat("objFoo (after new)\n")
print(objFoo)
## now assign 'frame' the results of generateFrame, i.e., an
## object of class 'Foo'. objFoo does not change
frame <- generateFrame(objFoo)
cat("frame:\n")
print(frame);
## change the value of [EMAIL PROTECTED]
setX(objFoo) <- data.frame(x=LETTERS[1:5], y=LETTERS[5:1])
cat("objFoo (after setX):\n")
print(objFoo)
## what to return?? maybe just 'ok', and lose all our changes!
"ok"
}
>
>
>
> - adschai
> ----- Original Message -----
> From: Martin Morgan @FHCRC.ORG>
> Date: Thursday, May 24, 2007 9:35 pm
> Subject: Re: [R] Question about setReplaceMethod
> To: [EMAIL PROTECTED]
> Cc: [email protected]
>> Hi Adschai --
>>
>> You'll want to return the value whose slot you have modified:
>>
>> setReplaceMethod("setX", "foo",
>> function(this,value) {
>> [EMAIL PROTECTED] <- value
>> this # add this line
>> })
>>
>> Martin
>>
>> [EMAIL PROTECTED] writes:
>>
>> > Hi
>> >
>> > I have the code like I show below. The problem here is that I
>> have a
>> > setReplacementMethod to set the value of my class slot. However,
>> > this function doesn't work when I call it within another function
>> > definition (declared by setMethod) of the same class. I do not
>> > understand this behavior that much. I'm wondering how to make this
>> > work? Any help would be really appreciated. Thank you.
>> >
>> > setClass("foo",
>> > representation(x="data.frame", y="character"))
>> > setGeneric("setX<-", function(this, value),
>> standardGeneric("setX<-"))
>> > setReplaceMethod("setX", "foo",
>> > function(this,value) {
>> > [EMAIL PROTECTED] <- value
>> > })
>> > setGeneric("generateFrame", function(this),
>> standardGeneric("generateFrame"))>
>> setReplaceMethod("generateFrame", "foo",
>> > function(this) {
>> > frame <- read.csv(file="myfile.csv", header=T) # read some
>> input file
>> > [EMAIL PROTECTED] <- frame # this doesn't replace the value for me
>> > setX(this) <- frame # this doesn't replace the value for me
>> > frame # instead I have to return the frame object
>> > })
>> > foo <- function(x,y) {
>> > objFoo <- new("foo", x=data.frame(NULL), y="")
>> > frame <- generateFrame(objFoo) # after this point, nothing got
>> assigned to [EMAIL PROTECTED]
>> > setX(objFoo) <- frame # this will work (why do I have to
>> duplicate this??)
>> > }
>> > - adschai
>> >
>> > [[alternative HTML version deleted]]
>> >
>> > ______________________________________________
>> > [email protected] 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.
>>
>> --
>> Martin Morgan
>> Bioconductor / Computational Biology
>> http://bioconductor.org
>>
--
Martin Morgan
Bioconductor / Computational Biology
http://bioconductor.org
______________________________________________
[email protected] 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.