Thanks Martin.
Here is my ''updated'' code.
setClass("myClass", representation(ID.r = "numeric", ID.c = "character", DAT =
"matrix"))
to.myClass <- function(ID.r, ID.c, DAT) {
out <- new("myClass", ID.r = ID.r, ID.c = ID.c, DAT = DAT)
return(out)
}
setMethod("[", "myClass", function(x, i, j, drop = TRUE) {
[email protected] <- [email protected][i]
[email protected] <- [email protected][j]
out.0 <- x@DAT[i,j]
out.1 <- to.myClass([email protected], [email protected], as.matrix(out.0))
return(out.1)
})
setMethod("[", c("myClass", "ANY", "character"),
function(x, i, j, ..., drop = TRUE) {
if(missing(i)) {[email protected] <- [email protected]} else {[email protected] <- [email protected][i]}
j <- which(j == [email protected])
[email protected] <- [email protected][j]
out.0 <- x@DAT[i, j]
out.1 <- to.myClass([email protected], [email protected], as.matrix(out.0))
return(out.1)
})
a <- to.myClass(seq(1,25), c("A","A","B","B"), matrix(rnorm(100), nrow = 25))
a
a[1:20, ] #works
a[, 1:3] #works
a[1:10, 1:3] #works
a[, "A"] #works
a[5:20, "B"] #works
It works, but Is it normal to write two codes for setMethod???
Nice weekend, OV
________________________________
From: Martin Morgan <[email protected]>
Cc: "[email protected]" <[email protected]>
Sent: Saturday, October 22, 2011 3:50 PM
Subject: Re: [R] setMethod "[" - extract by names within Slot
On 10/22/2011 02:11 AM, Omphalodes Verna wrote:
> Hi R-helper!
>
> I have problem with setMethods for "[". Here is example :
>
> setClass("myClass", representation(ID.r = "numeric", ID.c = "character", DAT
> = "matrix"))
>
> to.myClass<- function(ID.r, ID.c, DAT) {
> out<- new("myClass", ID.r = ID.r, ID.c = ID.c, DAT = DAT)
> return(out)
> }
>
> setMethod("[", "myClass", function(x, i, j, drop) {
> [email protected]<- [email protected][i]
> [email protected]<- [email protected][j]
> out.0<- x@DAT[i,j]
> out.1<- to.myClass([email protected], [email protected], as.matrix(out.0))
> return(out.1)
> })
>
> a<- to.myClass(seq(1,25), c("A","A","B","B"), matrix(rnorm(100), nrow = 25))
> a
>
>
> a[1:20, ] #works
> a[, 1:3] #works
> a[1:10, 1:3] #works
>
> a[, "A"] #not works
thinking about your code, this is the same as
> ID.c = c("A","A","B","B")
> j = "A"
> ID.c[j]
[1] NA
>
> What is solution to write "[" methods for extraction by names of Slot "ID.c"
Maybe (untested)
setMethod("[", c("myClass", "ANY", "character"),
function(x, i, j, ..., drop=TRUE) {
j = match(j, [email protected])
x[i, j, ..., drop=TRUE]
})
>
> Thanks all. OV
>
> [[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.
--
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109
Location: M1-B861
Telephone: 206 667-2793
[[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.