Skip to content

object is not subsettable

2 messages · Radek Blatny, Seth Falcon

#
Dear colleagues,
I've just come across a problem with the following command which is a  
part of the "metaOverview.R" code file provided as an monography- 
accompanying file at
http://www.bioconductor.org/docs/mogr/metadata:

##################################
R>  hasChr <- eapply(GOTERM, function(x)
+              x[grep("chromosome", Term(x))])

Error in x[grep("chromosome", Term(x))] : object is not subsettable
##################################

I have run the command in the (PPC) Mac OS X R 2.4.1 and (AMD Ubuntu)  
Linux R 2.4.0 with the same result so it shouldn't be any  
distribution-dependent problem. Obviously the "metaOverview.R" is not  
up-to-date since I had few problems before as well (e.g. that a  
function is in another package in BioC 1.9 etc.) but I was able to  
"repair" everything myself. However, this one I don't understand.  
Anyone can help? Some classes have changed?!

Best regards, Radek Blatny

Radek Blatny, MSc.
Institute of Molecular Genetics
Department of Mouse Molecular Genetics (Jiri Forejt unit)
Czech Academy of Sciences
Videnska 1083
142 20, Prague
Czech Republic
Tel. (+420) 241 062 260
Fax (+420) 241 062 154
http://www.img.cas.cz/mmg
email: blatny at biomed.cas.cz
Skype name: blatny
#
Hi Radek,

Radek Blatny <blatny at biomed.cas.cz> writes:
The appropriate place to ask about Bioconductor packages (and the BCBS
monograph) is on the bioconductor list.  I've cc'd the bioconductor
list, please send further replies or questions there.
You are correct that this code is out of date.  The reason is actually
due to changes in R.  Since R 2.4.0, S4 classes now have their own
internal type and do not act like lists.  This is a very good thing,
but it means that some code that relied on it will break.

The elements of the GOTERM environment are instances of the "GOTerms"
class defined in the annotate package.  So taking a look at the old
code:

    hasChr <- eapply(GOTERM, function(x)
                 x[grep("chromosome", Term(x))])

This is looping over all GOTerms instances in the GOTERM environment
and calling grep on the term summary:

     grep("chromosome", Term(x))

Since Term(x) returns a character vector of length one, if a match is
found the return value of grep will be 1.  If no match is found it
will be integer(0) (a zero-length integer vector).

If x (the GOTerms instance) was a list, then we would have either x[1]
or x[integer(0)].  But since x is an S4 class with no "[" method
defined, you now get an error.

The code example is just trying to count the number of GO Terms that
have "chromosome" in their description.  You can achieve this as
follows:

    hasChr <- eapply(GOTERM, function(x)
                 length(grep("chromosome", Term(x))))
    sum(unlist(hasChr))



+ seth

--
Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research Center
http://bioconductor.org