[R] Re: Re RGui and object browser

Dan Putler dputler at scu.edu
Fri Jul 19 10:27:42 CEST 2002


Hi Petr and any other interested parties,

Objects with mode "list" that have more than a single class attribute do cause 
my original function to die in a less than pleasant way.  Unfortunately, when 
the class attribute is longer than one, there are a huge number of potential 
special cases.  The two that have been brought to my attention so far are 
related to the Orthodont data frame (part of the nlme package) which has four 
class attributes (last in the list being "data.frame") and objects created by 
the aov() function (which can have two or four class descriptors).  I have 
revised the code to make it a bit more robust, and correct the two known 
problems (an object created by aov is given the Object.Type of "aov").  
However, the function should be viewed as being in an "early beta" state, so 
there will be other (hopefully minor) bugs that will come up.  In addition, 
there are other things missing from the function as it now stands.  
Specifically, it does not provide Object.Type information for certain types 
of objects such as "call" and "name".  Although this information gets 
captured by Object.Mode.

I've attached my revised version of the code below.  Any other suggestions or 
improvements would be welcomed.  Although, you may want to do this in a 
private e-mail to me.

Dan Putler

_______

ls.objects <- function (pos = 1, pattern, mode = "any", type = "any"){
    Object.Name <- ls(pos = pos, envir = as.environment(pos), pattern = 
pattern)
    Object.Mode <- rep("",length(Object.Name))
    Object.Type <- rep("",length(Object.Name))
    Variables <- rep("-",length(Object.Name))
    Observations <- rep("-",length(Object.Name))
    for (i in 1:length(Object.Name)){
	 Object.Mode[[i]] <- mode(get(Object.Name[[i]]))
	 if(is.list(get(Object.Name[[i]]))){
		if(is.null(class(get(Object.Name[[i]]))))
			Object.Type[[i]] <- c("unknown")
		else {
			Object.Attrib <- attributes(get(Object.Name[[i]]))
			if(length(Object.Attrib$class) == 1) {
				Object.Type[[i]] <- Object.Attrib$class
				if(Object.Type[[i]]=="data.frame"){
					Variables[[i]] <- as.character(length(Object.Attrib$names))
					Observations[[i]] <- as.character(length(Object.Attrib$row.names))
				}
			}
			else {
				if("data.frame" %in% Object.Attrib$class){
					Object.Type[[i]] <- "data.frame"
					Variables[[i]] <- as.character(length(Object.Attrib$names))
					Observations[[i]] <- as.character(length(Object.Attrib$row.names))
				}
				else {
					if("aov" %in% Object.Attrib$class) Object.Type[[i]] <- "aov"
				}
			}
		}
	}
	if(is.matrix(get(Object.Name[[i]]))){
	 	Object.Attrib <- dim(get(Object.Name[[i]]))
		Object.Type[[i]] <- c("matrix")
		Variables[[i]] <- as.character(Object.Attrib[2])
		Observations[[i]] <- as.character(Object.Attrib[1])
	}
	if(is.vector(get(Object.Name[[i]])) && (Object.Mode[[i]]=="character" || 
Object.Mode[[i]]=="numeric")){
		Object.Type[[i]] <- c("vector")
		Variables[[i]] <- c("1")
		Observations[[i]] <- as.character(length(get(Object.Name[[i]])))
	}
	if(is.factor(get(Object.Name[[i]]))){
		Object.Type[[i]] <- c("factor")
		Variables[[i]] <- c("1")
		Observations[[i]] <- as.character(length(get(Object.Name[[i]])))
	}
	if(is.function(get(Object.Name[[i]]))) Object.Type[[i]] <- c("function")
    }
    objList <- 
data.frame(Object.Name,Object.Mode,Object.Type,Observations,Variables)
    if(mode != "any") objList <- objList[objList[["Object.Mode"]] == mode,]
    if(type != "any") objList <- objList[objList[["Object.Type"]] == type,]
    return(objList)
}

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list