On Sun, 15 Mar 2009 14:23:40 +0100 Wacek Kusnierczyk <waclaw.marcin.kusnierc...@idi.ntnu.no> wrote:
> Edna Bell wrote: > > How do I find the functions which are primitives, please? > > > > you can scan the whole search path for functions that are primitives: > > primitives = sapply(search(), function(path) > with(as.environment(path), Filter(is.primitive, lapply(ls(), > get)))) > > primitives is a list of named lists of primitives, one sublist for > each attached package (most sublists will be empty, i guess). The code above will miss some primitives in package:base, namely those that start with a dot: R> primitives <- sapply(search(), function(path) + with(as.environment(path), + Filter(is.primitive, lapply(ls(), get)))) R> sapply(primitives, length) .GlobalEnv package:stats package:graphics package:grDevices 0 0 0 0 package:utils package:datasets package:methods Autoloads 0 0 2 0 package:base 176 R> primitives <- sapply(search(), function(path) + with(as.environment(path), + Filter(is.primitive, lapply(ls(all=TRUE), get)))) R> sapply(primitives, length) .GlobalEnv package:stats package:graphics package:grDevices 0 0 0 0 package:utils package:datasets package:methods Autoloads 0 0 2 0 package:base 188 Also, but that is a matter of taste, it could be preferable to use sapply instead of lapply: R> primitives$`package:methods` [[1]] function (expr) .Primitive("quote") [[2]] .Primitive("[[<-") R> head(primitives$`package:base`) [[1]] function (x) .Primitive("!") [[2]] function (e1, e2) .Primitive("!=") [[3]] .Primitive("$") [[4]] .Primitive("$<-") [[5]] function (e1, e2) .Primitive("%%") [[6]] function (x, y) .Primitive("%*%") R> primitives <- sapply(search(), function(path) + with(as.environment(path), + Filter(is.primitive, sapply(ls(all=TRUE), get)))) R> primitives$`package:methods` $Quote function (expr) .Primitive("quote") $`el<-` .Primitive("[[<-") R> head(primitives$`package:base`) $`!` function (x) .Primitive("!") $`!=` function (e1, e2) .Primitive("!=") $`$` .Primitive("$") $`$<-` .Primitive("$<-") $`%%` function (e1, e2) .Primitive("%%") $`%*%` function (x, y) .Primitive("%*%") Cheers, Berwin ______________________________________________ R-help@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.