R : Copyright 2006, The R Foundation for Statistical Computing
Version 2.4.0 Under development (unstable) (2006-04-10 r37688)
ISBN 3-900051-07-0

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 more information and
'citation()' on how to cite R or R packages in publications.

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

> #### Which functions in R  are	.Primitive()  / which should be ?
> #### ------------------------------------------------------------
> #### M.Maechler, May, 1998.
> ####
> #### text was in ../doc/manual/primitive-funs.tex , now
> #### ==> ../doc/manual/R-exts.texi "@appendix R (internal) ...
> ####	 ~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> bpos <- match("package:base",search())
> nn <- ls(pos=bpos, all = TRUE)
> length(nn) # 844 [R 0.62.0, March 25, 1998;  1067 R 0.64.0 March 1999]
[1] 1090
> 
> is.special <- function(obj) typeof(obj) == "special"
> 
> Primf <- nn[sapply(nn, function(N) is.primitive(get(N, pos=bpos)))]
> length(Primf) ## 195  R 0.62.0, March 25, 1998
[1] 152
> ## 132	R 0.62.2+
> Real.primitives <-
+     list(
+ 	 specials = c("{", "(", "if", "for", "while", "repeat", "break", "next",
+ 	 "return", "function", "quote",
+ 	 "on.exit"
+ 	 ),
+ 	 language = c("$", "$<-", "@", "<-", "=", "<<-", "[", "[<-", "[[", "[[<-"),
+ 	 arith = c("%%", "%*%", "%/%","*", "+", "-", "/", "^"),
+ 	 logic = c("!",	 "&", "&&",  "|", "||",
+ 	 "<", "<=", "==", ">", ">=", "!="),
+ 	 arithF =
+ 	 c("sign", "abs",
+ 	   "floor", "ceiling", "trunc",
+ 	   "sqrt",
+ 	   "exp",	## NOT: "log",
+ 	   "cos",   "sin",  "tan",
+ 	   "acos",  "asin", "atan", ## Not:  atan2
+ 	   "cosh",  "sinh", "tanh",
+ 	   "acosh","asinh","atanh",
+ 	   "cumsum","cumprod",
+ 	   "cummax", "cummin"
+ 	   ),
+ 	 arithC = c("Arg", "Conj", "Im", "Mod", "Re"),
+ 
+ 	 programming =
+ 	 c("nargs", "missing", # actually args(.) could be as formal(.)
+ 	   "interactive",
+ 	   ".Primitive", ".Internal", ".External", ".Call",
+            ".External.graphics", ".Call.graphics",
+ 	   ".C", ".Fortran", "symbol.C", "symbol.For",
+ 	   "emptyenv", "baseenv",
+ 	   "globalenv", "pos.to.env", "unclass",
+            "as.character", "as.environment",
+ 	   ##maybe ? "gc", "gcinfo",
+ 	   ##
+ 	   "debug", "undebug", ".primTrace", ".primUntrace",
+ 	   "browser",  "proc.time", "gc.time",
+            ".subset", ".subset2"
+ 	   ),
+ 
+ 	 language2= c(":", "~", "c", "list",
+ 	 "call", "as.call", "expression", "substitute",
+ 	 "UseMethod",
+          "standardGeneric",
+ 	 "invisible", "reg.finalizer",
+ 	 ),
+ 
+ 	 language3=
+ 	 c("environment<-",
+ 	   "length",	"length<-",
+ 	   "class",	"class<-",
+ 	   "attr",
+ 	   "attr<-",
+ 	   "attributes",	"attributes<-",
+ 	   "dim",		"dim<-",
+ 	   "dimnames",	"dimnames<-",
+ 	   "oldClass",	"oldClass<-",
+ 	   ),
+ 	 )
> real.primitives <- unlist(Real.primitives)
> ##names(real.primitives) <- rep("",length(real.primitives))
> 
> !any(duplicated(real.primitives)) # TRUE
[1] TRUE
> all(real.primitives %in% Primf)	  # TRUE
[1] TRUE
> 
> "%w/o%" <- function(a,b)  a[! a %in% b]	 ## a without b
> 
> prim.f <- Primf %w/o% real.primitives
> ## see below: contains the is.xxxx(.) funtions
> length(prim.f) == length(Primf) - length(real.primitives)# TRUE
[1] TRUE
> 
> Specf <- Primf[iPsp <- sapply(Primf, function(N) is.special(get(N, pos=bpos)))]
> length(Specf) ## 36 [ R 0.63 ]
[1] 40
> Specf
 [1] "$"            "$<-"          "&&"           ".Internal"    "<-"          
 [6] "<<-"          "="            "@"            "UseMethod"    "["           
[11] "[<-"          "[["           "[[<-"         "as.character" "attr<-"      
[16] "break"        "browser"      "c"            "call"         "dim"         
[21] "dim<-"        "dimnames"     "dimnames<-"   "expression"   "for"         
[26] "function"     "if"           "interactive"  "missing"      "nargs"       
[31] "next"         "on.exit"      "quote"        "repeat"       "return"      
[36] "substitute"   "while"        "{"            "||"           "~"           
> ## the non-"special" ones:
> all("builtin" == sapply(Primf[!iPsp], function(N) typeof(get(N, pos=bpos))))
[1] TRUE
> 
> 
> ncpf <- nchar(prim.f)
> table(ncpf)
ncpf
 5  6  7  8  9 10 11 12 13 14 
 1  1  5  1  7  4  4  2  1  1 
> prim.f[ncpf <= 6]#  only is.na, is.nan
[1] "is.na"  "is.nan"
> 
> ( prim.isf <- prim.f[p.isis <- substr(prim.f,1,2) == "is"] )
 [1] "is.array"       "is.atomic"      "is.call"        "is.character"  
 [5] "is.complex"     "is.double"      "is.environment" "is.expression" 
 [9] "is.finite"      "is.function"    "is.infinite"    "is.integer"    
[13] "is.language"    "is.list"        "is.logical"     "is.matrix"     
[17] "is.na"          "is.name"        "is.nan"         "is.null"       
[21] "is.numeric"     "is.object"      "is.pairlist"    "is.real"       
[25] "is.recursive"   "is.single"      "is.symbol"     
> 
> length(prim.f2 <- prim.f[! p.isis]) # down to 87   [R 0.62.0, March 25, 1998]
[1] 0
> 					# 61  [March 27]
> 					# 43  [April 17];  38 [April 22]
> ##-> 0	[May 1, 1998]
> 
> prim.f2 # character(0) --- none left! --
character(0)
> 
> for(n in prim.f2)
+     cat(n," <- function(*) .Internal(",n,"(*))\n", sep="")
>