R : Copyright 2000, The R Development Core Team
Version 1.2.0 Under development (unstable) (2000-09-04)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type	"?license" or "?licence" for distribution details.

R is a collaborative project with many contributors.
Type	"?contributors" for a list.

Type	"demo()" for some demos, "help()" for on-line help, or
    	"help.start()" for a HTML browser interface to help.
Type	"q()" to quit R.

> 
> ls.base <- ls(pos=length(search()))#- something more elegant ?
> base.is.f <- sapply(ls.base, function(x) is.function(get(x)))
> bi <- ls.base[base.is.f]
> cat("\nNumber of base objects:\t\t", length(ls.base),
+     "\nNumber of builtin functions:\t", sum(base.is.f),
+     "\n\t starting with 'is.' :\t ",
+     length(is.bi <- bi[substring(bi,1,3) == "is."]), "\n")

Number of base objects:		 1286 
Number of builtin functions:	 1261 
	 starting with 'is.' :	  40 
> ## 0.14 : 31
> ## 0.50 : 33
> ## 0.60 : 34
> ## 0.62 : 35
> ## 0.63 : 37
> 
> ## This can be useful:	Which of the  builtin functions are "primitive" ?
> is.primitive <- function(obj)  is.function(obj) && is.null(args(obj))
> 
> is.ALL <- function(obj, func.names = ls(pos=length(search())),
+ 		   not.using = c("is.single", "is.na.data.frame",
+                    "is.na.POSIXlt",
+ 		   "is.loaded", "is.empty.model", "is.R", "is.element"),
+ 		   true.only = FALSE, debug = FALSE)
+ {
+     ## Purpose: show many 'attributes' of  R object __obj__
+     ## -------------------------------------------------------------------------
+     ## Arguments: obj: any R object
+     ## -------------------------------------------------------------------------
+     ## Author: Martin Maechler, Date:  6 Dec 96, 15:23
+ 
+     is.fn <- func.names[substring(func.names,1,3) == "is."]
+     use.fn <- is.fn[ is.na(match(is.fn, not.using))]
+ 
+     r <- if(true.only) character(0)
+     else structure(vector("list", length= length(use.fn)), names= use.fn)
+     for(f in use.fn) {
+ 	if(debug) cat(f,"")
+ 	fn <- get(f)
+ 	rr <-
+ 	    if(any(f == c("is.na", "is.nan")) &&
+ 	       ((!is.atomic(obj) && !is.list(obj)) || is.null(obj)))
+ 		NA
+ 	    else
+ 		if(is.primitive(fn) || length(formals(fn))) fn(obj) else fn()
+ 	if(!is.logical(rr)) cat("f=",f," --- rr	 is NOT logical	 = ",rr,"\n")
+ 	##if(1!=length(rr))   cat("f=",f," --- rr NOT of length 1; = ",rr,"\n")
+ 	if(true.only && length(rr)==1 && !is.na(rr) && rr) r <- c(r, f)
+ 	else if(!true.only) r[[f]] <- rr
+     }
+     if(debug)cat("\n")
+     if(is.list(r)) structure(r, class = "isList") else r
+ }
> 
> print.isList <- function(r, ...)
+ {
+     ## Purpose:	 print METHOD  for  'isList' objects
+     ## -------------------------------------------------------------------------
+     ## Arguments:
+     ## -------------------------------------------------------------------------
+     ## Author: Martin Maechler, Date: 12 Mar 97, 15:07
+     if(is.list(r)) {
+ 	nm <- format(names(r))
+ 	rr <- lapply(r, symnum)
+ 	for(i in seq(along=r)) cat(nm[i],":",rr[[i]],"\n", ...)
+     } else NextMethod("print", ...)
+ }
> 
> 
> is.ALL(NULL)
is.array       : . 
is.atomic      : | 
is.call        : . 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : . 
is.environment : . 
is.expression  : . 
is.factor      : . 
is.finite      : NA 
is.function    : . 
is.infinite    : NA 
is.integer     : . 
is.language    : . 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : ? 
is.name        : . 
is.nan         : ? 
is.null        : | 
is.numeric     : . 
is.object      : . 
is.ordered     : . 
is.pairlist    : | 
is.qr          : . 
is.real        : . 
is.recursive   : . 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : . 
> is.ALL(NULL,   true.only = TRUE)
[1] "is.atomic"   "is.null"     "is.pairlist"
> all.equal(NULL, pairlist())
[1] TRUE
> ## list() != NULL == pairlist() :
> is.ALL(list(), true.only = TRUE)
[1] "is.list"      "is.recursive" "is.vector"   
> 
> (pl <- is.ALL(pairlist(1,    list(3,"A")), true.only = TRUE))
[1] "is.list"      "is.pairlist"  "is.recursive"
> (ll <- is.ALL(    list(1,pairlist(3,"A")), true.only = TRUE))
[1] "is.list"      "is.recursive" "is.vector"   
> all.equal(pl[pl != "is.pairlist"],
+           ll[ll != "is.vector"])## TRUE
[1] TRUE
> 
> is.ALL(1:5)
is.array       : . 
is.atomic      : | 
is.call        : . 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : . 
is.environment : . 
is.expression  : . 
is.factor      : . 
is.finite      : | | | | | 
is.function    : . 
is.infinite    : . . . . . 
is.integer     : | 
is.language    : . 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : . . . . . 
is.name        : . 
is.nan         : . . . . . 
is.null        : . 
is.numeric     : | 
is.object      : . 
is.ordered     : . 
is.pairlist    : . 
is.qr          : . 
is.real        : . 
is.recursive   : . 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : | 
> is.ALL(array(1:24, 2:4))
is.array       : | 
is.atomic      : | 
is.call        : . 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : . 
is.environment : . 
is.expression  : . 
is.factor      : . 
is.finite      : | | | | | | | | | | | | | | | | | | | | | | | | 
is.function    : . 
is.infinite    : . . . . . . . . . . . . . . . . . . . . . . . . 
is.integer     : | 
is.language    : . 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : . . . . . . . . . . . . . . . . . . . . . . . . 
is.name        : . 
is.nan         : . . . . . . . . . . . . . . . . . . . . . . . . 
is.null        : . 
is.numeric     : | 
is.object      : . 
is.ordered     : . 
is.pairlist    : . 
is.qr          : . 
is.real        : . 
is.recursive   : . 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : . 
> is.ALL(1 + 3)
is.array       : . 
is.atomic      : | 
is.call        : . 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : | 
is.environment : . 
is.expression  : . 
is.factor      : . 
is.finite      : | 
is.function    : . 
is.infinite    : . 
is.integer     : . 
is.language    : . 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : . 
is.name        : . 
is.nan         : . 
is.null        : . 
is.numeric     : | 
is.object      : . 
is.ordered     : . 
is.pairlist    : . 
is.qr          : . 
is.real        : | 
is.recursive   : . 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : | 
> e13 <- expression(1 + 3)
> is.ALL(e13)
is.array       : . 
is.atomic      : . 
is.call        : . 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : . 
is.environment : . 
is.expression  : | 
is.factor      : . 
is.finite      : . 
is.function    : . 
is.infinite    : . 
is.integer     : . 
is.language    : | 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : ? 
is.name        : . 
is.nan         : ? 
is.null        : . 
is.numeric     : . 
is.object      : . 
is.ordered     : . 
is.pairlist    : . 
is.qr          : . 
is.real        : . 
is.recursive   : | 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : | 
> is.ALL(substitute(expression(a + 3), list(a=1)), true.only = TRUE)
[1] "is.call"      "is.language"  "is.recursive"
> is.ALL(y ~ x)
is.array       : . 
is.atomic      : . 
is.call        : | 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : . 
is.environment : . 
is.expression  : . 
is.factor      : . 
is.finite      : . . . 
is.function    : . 
is.infinite    : . . . 
is.integer     : . 
is.language    : | 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : ? 
is.name        : . 
is.nan         : ? 
is.null        : . 
is.numeric     : . 
is.object      : | 
is.ordered     : . 
is.pairlist    : . 
is.qr          : . 
is.real        : . 
is.recursive   : | 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : . 
> 
> is0 <- is.ALL(numeric(0))
> is0.ok <- 1 == (lis0 <- sapply(is0, length))
> is0[!is0.ok]
$is.finite
logical(0)

$is.infinite
logical(0)

$is.na
logical(0)

$is.nan
logical(0)

> is0 <- unlist(is0)
> is0
      is.array      is.atomic        is.call   is.character     is.complex 
         FALSE           TRUE          FALSE          FALSE          FALSE 
 is.data.frame      is.double is.environment  is.expression      is.factor 
         FALSE           TRUE          FALSE          FALSE          FALSE 
   is.function     is.integer    is.language        is.list     is.logical 
         FALSE          FALSE          FALSE          FALSE          FALSE 
     is.matrix        is.name        is.null     is.numeric      is.object 
         FALSE          FALSE          FALSE           TRUE          FALSE 
    is.ordered    is.pairlist          is.qr        is.real   is.recursive 
         FALSE          FALSE          FALSE           TRUE          FALSE 
     is.symbol       is.table          is.ts      is.vector 
         FALSE          FALSE          FALSE           TRUE 
> ispi <- unlist(is.ALL(pi))
> all(ispi[is0.ok] == is0)
[1] TRUE
> 
> is.ALL(numeric(0), true=TRUE)
[1] "is.atomic"  "is.double"  "is.numeric" "is.real"    "is.vector" 
> is.ALL(array(1,1:3), true=TRUE)
[1] "is.array"   "is.atomic"  "is.double"  "is.numeric" "is.real"   
> is.ALL(cbind(1:3), true=TRUE)
[1] "is.array"   "is.atomic"  "is.integer" "is.matrix"  "is.numeric"
> 
> is.ALL(structure(1:7, names = paste("a",1:7,sep="")))
is.array       : . 
is.atomic      : | 
is.call        : . 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : . 
is.environment : . 
is.expression  : . 
is.factor      : . 
is.finite      : | | | | | | | 
is.function    : . 
is.infinite    : . . . . . . . 
is.integer     : | 
is.language    : . 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : . . . . . . . 
is.name        : . 
is.nan         : . . . . . . . 
is.null        : . 
is.numeric     : | 
is.object      : . 
is.ordered     : . 
is.pairlist    : . 
is.qr          : . 
is.real        : . 
is.recursive   : . 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : | 
> is.ALL(structure(1:7, names = paste("a",1:7,sep="")), true.only = TRUE)
[1] "is.atomic"  "is.integer" "is.numeric" "is.vector" 
> 
> x <- 1:20 ; y <- 5 + 6*x + rnorm(20) ; lm.xy <- lm(y ~ x)
> is.ALL(lm.xy, true.only = TRUE)
[1] "is.list"      "is.object"    "is.recursive"
> is.ALL(structure(1:7, names = paste("a",1:7,sep="")))
is.array       : . 
is.atomic      : | 
is.call        : . 
is.character   : . 
is.complex     : . 
is.data.frame  : . 
is.double      : . 
is.environment : . 
is.expression  : . 
is.factor      : . 
is.finite      : | | | | | | | 
is.function    : . 
is.infinite    : . . . . . . . 
is.integer     : | 
is.language    : . 
is.list        : . 
is.logical     : . 
is.matrix      : . 
is.na          : . . . . . . . 
is.name        : . 
is.nan         : . . . . . . . 
is.null        : . 
is.numeric     : | 
is.object      : . 
is.ordered     : . 
is.pairlist    : . 
is.qr          : . 
is.real        : . 
is.recursive   : . 
is.symbol      : . 
is.table       : . 
is.ts          : . 
is.vector      : | 
> is.ALL(structure(1:7, names = paste("a",1:7,sep="")), true.only = TRUE)
[1] "is.atomic"  "is.integer" "is.numeric" "is.vector" 
> 
>