[R] How to maintain class signature in splom
Gosink, John
gosinkj at amgen.com
Fri Aug 27 17:58:22 CEST 2010
All,
I was having trouble trying to create a new class of data and pass it on to splom (in the lattice library). I mentioned this to Martin Morgan after a talk he gave. Following is not so much a question, but rather an answer from Morgan that might be useful to others. Here is the edited part of an email conversation with him:
On Thursday, August 26, 2010 1:36 PM, Martin Morgan wrote:
Fun! I think the problem is
> x = new("censored", lung$time, event=lung$status)
> x[1:5]
[1] 306 455 1010 210 883
which splom does (subsetting) as part of it's parsing of the general case. So
setMethod("[", "censored",
function(x, i, j, ..., drop=TRUE)
{
initialize(x, x at .Data[i], event=x at event[i])
})
and
> x[1:5]
An object of class "censored"
[1] 306 455 1010 210 883
Slot "event":
[1] 2 2 1 2 2
which I think works. If so, and if your post is still dangling on R-help, then maybe you could follow up there to help others in the same position?
Martin
-------------
On 8/26/2010 10:13 AM, Gosink, John wrote:
Hi Martin,
I enjoyed the presentation last night. As per the brief discussion afterwards, I'm having some trouble getting a new class I created to work its way into splom. The basic idea is that I want to trick out the upper.panel and lower.panel functions in splom to recognize different flavors (classes) of 'x' and 'y' values and do different behaviors accordingly. Below is what I posted to the BioConductor mailing list but didn't get any answer. Perhaps something is obvious to you? Any advice you could give would be greatly appreciated.
# This is a new class to combine the time and censoring information
# into one column in the data frame that I'll use
setClass("censored",
representation(event = "numeric"),
contains = "numeric")
# This is a simplification of what I'm doing to show that I'm not retaining
# the 'censored' class into the lower.panel function
panel.lowerTest <- function(x, y, ...) {
print(class(x))
print(x)
print(class(y))
print(y)
cat("\n\n ---------\n\n")
panel.xyplot(x,y,...)
}
# Here is a simple data example
library(survival)
library(lattice)
data(lung)
lung = lung[1:50,c("inst", "time", "status", "age", "sex")]
lung$sex = as.factor(c("M", "F")[lung$sex])
# Create a 'censored' object and tack it onto my data set
lung$OS = new("censored", lung$time, event=lung$status)
print(lung$OS) # This is what a 'censored' object should look like
# Do the splom. Notice that the lower panel should have reported that
# it was seeing 'censored' data, but it didn't...
splom(lung[, c("sex", "age", "OS")], lower.panel = panel.lowerTest)
________________
John Gosink, PhD
Senior Scientist, Amgen, Inc.
1201 Amgen Court West
Seattle, WA 98119-3105
(w) 206 265-8217
More information about the R-help
mailing list