Hi All, I have tried to find an answer within documentation, but I cannot: o How can call a class "slot" without knowing the name a priori? E.g., let's say I use the "pcaMethods" library to create a "pcaRes" object. How can I call parts of that object without using the specific names of the object in the call? example code: library(pcaMethods) myMatrix <- matrix(runif(1e4), ncol=100) ## silly, but sufficient for example myPCA <- pca(myMatrix) ## creates a "pcaRes" S4 class for (i in slotNames(myPCA) ) { summary(myPCA@i) ### I know this doesn't work, but this is the question... what grammar could I use? } ################ I would like to be able to print out the summary for each of the components of the class "pcaRes" without knowing a priori the names of those components. I could, for example in the above case, type in summary(myPCA@completeObs) to get a summary of the input matrix. But I HAVE TO TYPE "@completeObs". In the non-S4 world, I could type myPCA[[i]] for lists, where "i" could be looping through either the list names, or the list indices. Similarly, I could type myPCA[i] for arrays, where "i" again can be either a numeric index or the name. Without this ability to identify portions within an array / loop context, it becomes exceedingly difficult to work in "S4 land". How is this sort of thing done? Thank you! Mike --- XKCD <http://www.xkcd.com> [[alternative HTML version deleted]]
On 08/08/2011 8:04 PM, Mike Williamson wrote:> Hi All, > > I have tried to find an answer within documentation, but I cannot: > > o How can call a class "slot" without knowing the name a priori?See ?slot.> > E.g., let's say I use the "pcaMethods" library to create a "pcaRes" > object. How can I call parts of that object without using the specific > names of the object in the call? > > example code: > > library(pcaMethods) > myMatrix<- matrix(runif(1e4), ncol=100) ## silly, but sufficient for > example > myPCA<- pca(myMatrix) ## creates a "pcaRes" S4 class > > for (i in slotNames(myPCA) ) { > summary(myPCA at i) ### I know this doesn't work, but this is the > question... what grammar could I use?summary(slot(myPCA, i)) Duncan Murdoch> } > > ################ > > I would like to be able to print out the summary for each of the components > of the class "pcaRes" without knowing a priori the names of those > components. I could, for example in the above case, type in > summary(myPCA at completeObs) to get a summary of the input matrix. But I HAVE > TO TYPE "@completeObs". In the non-S4 world, I could type myPCA[[i]] for > lists, where "i" could be looping through either the list names, or the list > indices. Similarly, I could type myPCA[i] for arrays, where "i" again can > be either a numeric index or the name. > > Without this ability to identify portions within an array / loop context, it > becomes exceedingly difficult to work in "S4 land". How is this sort of > thing done? > > Thank you! > Mike > > > > --- > XKCD<http://www.xkcd.com> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org 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.
On 08/08/2011 05:04 PM, Mike Williamson wrote:> Hi All, > > I have tried to find an answer within documentation, but I cannot: > > o How can call a class "slot" without knowing the name a priori? > > E.g., let's say I use the "pcaMethods" library to create a "pcaRes" > object. How can I call parts of that object without using the specific > names of the object in the call? > > example code: > > library(pcaMethods) > myMatrix<- matrix(runif(1e4), ncol=100) ## silly, but sufficient for > example > myPCA<- pca(myMatrix) ## creates a "pcaRes" S4 class > > for (i in slotNames(myPCA) ) { > summary(myPCA at i) ### I know this doesn't work, but this is the > question... what grammar could I use? > }usually one doesn't want to directly access S4 slots, but instead use accessors defined by the author, e.g., completeObs(myPCA). The idea is that the implementation of the class might deviate from the interface. Methods might be documented on the class help page class(myPCA) class?pcaRes or discoverable showMethods(class="pcaRes", where=getNamespace("pcaMethods")) Martin> ################ > > I would like to be able to print out the summary for each of the components > of the class "pcaRes" without knowing a priori the names of those > components. I could, for example in the above case, type in > summary(myPCA at completeObs) to get a summary of the input matrix. But I HAVE > TO TYPE "@completeObs". In the non-S4 world, I could type myPCA[[i]] for > lists, where "i" could be looping through either the list names, or the list > indices. Similarly, I could type myPCA[i] for arrays, where "i" again can > be either a numeric index or the name. > > Without this ability to identify portions within an array / loop context, it > becomes exceedingly difficult to work in "S4 land". How is this sort of > thing done? > > Thank you! > Mike > > > > --- > XKCD<http://www.xkcd.com> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org 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