2 min read

Primitive Functions List

Ever wondered which R functions are actually passed to internal C code? Well, wonder no more as it turns out there is an unexported named list within the methods package providing instructions for turning builtin and special functions into generic functions. Wrapping this list with names() gives us the list of all R functions which wrap calls to .Primitive().

names(methods:::.BasicFunsList)
#   [1] "$"                    "$<-"                  "["                   
#   [4] "[<-"                  "[["                   "[[<-"                
#   [7] "%*%"                  "xtfrm"                "c"                   
#  [10] "all"                  "any"                  "sum"                 
#  [13] "prod"                 "max"                  "min"                 
#  [16] "range"                "is.matrix"            ">="                  
#  [19] "cosh"                 "cummax"               "dimnames<-"          
#  [22] "as.raw"               "log2"                 "tan"                 
#  [25] "dim"                  "as.logical"           "^"                   
#  [28] "is.finite"            "sinh"                 "log10"               
#  [31] "as.numeric"           "dim<-"                "is.array"            
#  [34] "tanpi"                "gamma"                "atan"                
#  [37] "as.integer"           "Arg"                  "signif"              
#  [40] "cumprod"              "cos"                  "length"              
#  [43] "!="                   "digamma"              "exp"                 
#  [46] "floor"                "acos"                 "seq.int"             
#  [49] "abs"                  "length<-"             "sqrt"                
#  [52] "!"                    "acosh"                "is.nan"              
#  [55] "Re"                   "tanh"                 "names"               
#  [58] "cospi"                "&"                    "anyNA"               
#  [61] "trunc"                "cummin"               "levels<-"            
#  [64] "*"                    "Mod"                  "|"                   
#  [67] "names<-"              "+"                    "log"                 
#  [70] "lgamma"               "as.complex"           "asinh"               
#  [73] "-"                    "sin"                  "/"                   
#  [76] "as.environment"       "<="                   "as.double"           
#  [79] "is.infinite"          "is.numeric"           "rep"                 
#  [82] "round"                "sinpi"                "dimnames"            
#  [85] "asin"                 "as.character"         "%/%"                 
#  [88] "is.na"                "<"                    ">"                   
#  [91] "Im"                   "%%"                   "trigamma"            
#  [94] "=="                   "cumsum"               "atanh"               
#  [97] "sign"                 "ceiling"              "Conj"                
# [100] "as.call"              "log1p"                "expm1"               
# [103] "("                    ":"                    "="                   
# [106] "@"                    "{"                    "~"                   
# [109] "&&"                   ".C"                   "baseenv"             
# [112] "quote"                "<-"                   "is.name"             
# [115] "if"                   "||"                   "attr<-"              
# [118] "untracemem"           ".cache_class"         "substitute"          
# [121] "interactive"          "is.call"              "switch"              
# [124] "function"             "is.single"            "is.null"             
# [127] "is.language"          "is.pairlist"          ".External.graphics"  
# [130] "globalenv"            "class<-"              ".Primitive"          
# [133] "is.logical"           "enc2utf8"             "UseMethod"           
# [136] ".subset"              "proc.time"            "enc2native"          
# [139] "repeat"               "<<-"                  "@<-"                 
# [142] "missing"              "nargs"                "isS4"                
# [145] ".isMethodsDispatchOn" "forceAndCall"         ".primTrace"          
# [148] "storage.mode<-"       ".Call"                "unclass"             
# [151] "gc.time"              ".subset2"             "environment<-"       
# [154] "emptyenv"             "seq_len"              ".External2"          
# [157] "is.symbol"            "class"                "on.exit"             
# [160] "is.raw"               "for"                  "is.complex"          
# [163] "list"                 "invisible"            "is.character"        
# [166] "oldClass<-"           "is.environment"       "attributes"          
# [169] "break"                "return"               "attr"                
# [172] "tracemem"             "next"                 ".Call.graphics"      
# [175] "standardGeneric"      "is.atomic"            "retracemem"          
# [178] "expression"           "is.expression"        "call"                
# [181] "is.object"            "pos.to.env"           "attributes<-"        
# [184] ".primUntrace"         "...length"            ".External"           
# [187] "oldClass"             ".Internal"            ".Fortran"            
# [190] "browser"              "is.double"            "while"               
# [193] "nzchar"               "is.list"              "lazyLoadDBfetch"     
# [196] "...elt"               "is.integer"           "is.function"         
# [199] "is.recursive"         "seq_along"            "unlist"              
# [202] "as.vector"            "lengths"