Rev 39360 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
functionBody <- get("body", mode = "function").ff <- function(fun, envir = environment(fun), value) funbody(.ff, envir = .GlobalEnv) <- body(get("body<-"))"functionBody<-" <- .ffrm(.ff)allNames <-## the character vector of names (unlike names(), never returns NULL)function(x){value <- names(x)if(is.null(value))character(length(x))elsevalue}getFunction <- function(name, generic = TRUE, mustFind = TRUE,where = topenv(parent.frame()))## find the object as a function.{found <- FALSEwhere <- as.environment(where)f <- NULL## parent.env sequence of a namespace ends in the base package namespace,## of a non-namespace ends in NULL (equiv. to base environment) [sigh]lastEnv <- if(isNamespace(where)) function(where) isBaseNamespace(where) elsefunction(where) identical(where, baseenv())repeat {if(exists(name, envir = where, mode = "function", inherits = FALSE)) {f <- get(name, envir = where)found <- generic || !is(f, "genericFunction")}if(found || lastEnv(where))breakwhere <- parent.env(where)}if(!found && mustFind)if(generic) stop(gettextf("no function \"%s\" found", name), domain = NA)else stop(gettextf("no non-generic function \"%s\" found", name),domain = NA)f}el <-function(object, where)## element of a vector; numeric index only.#### the definition allows indexing beyond current length of vector## (consistent with [[]] in S but not in R).object[where][[1]]"el<-" <-## set the element of a vector; numeric index only..Primitive("[[<-")elNamed <-## get the element of the vector corresponding to name. No partial matching.function(x, name, mustFind=FALSE){i <- match(name, names(x))if(is.na(i)) {if(mustFind)stop(gettextf("\"%s\" is not one of the element names", name),domain = NA)else NULL}elseel(x,i)}"elNamed<-" <-## set the element of the vector corresponding to name.function(x, name, value){x[[name]] <- valuex}formalArgs <-## Returns the names of the formal arguments of this function.function(def)names(formals(def))findFunction <-## return a list of all the places where a function## definition for `name' exists. If `generic' is FALSE, ignore generic## functions.function(f, generic = TRUE, where = topenv(parent.frame())){allWhere <- .findAll(f, where)ok <- rep(FALSE, length(allWhere))for(i in seq_along(ok)) {wherei <- allWhere[[i]]if(exists(f, wherei, inherits = FALSE)) {fdef <-get(f, wherei)if(generic || is.primitive(fdef)|| !isGeneric(f, wherei, fdef))ok[[i]] <- TRUE}}allWhere[ok]}existsFunction <- function(f, generic=TRUE, where = topenv(parent.frame()))length(findFunction(f, generic, where))>0Quote <- get("quote" , mode = "function").message <-## output all the arguments, pasted together with no intervening spaces.function(...) {## the junk below is just til cat honors fill=TRUE on a single string.text <- paste(..., collapse="", sep="")pos <- max(2 * getOption("width") %/% 3, 20)while(nchar(text) > pos) {line <- substr(text, 1, pos)text <- substr(text, pos+1, nchar(text))word <- regexpr(" ", text)if(word < 0) {line <- paste(line, text, sep="")text <- ""}else {line <- paste(line, substr(text, 1, word -1), sep="")text <- substr(text, word+1, nchar(text))}cat(line, "\n")}if(nchar(text) > 0)cat(text, "\n")}hasArg <- function(name) {aname <- as.character(substitute(name))fnames <- names(formals(sys.function(sys.parent())))if(is.na(match(aname, fnames))) {if(is.na(match("...", fnames)))FALSEelse {dotsCall <- eval(quote(substitute(list(...))), sys.parent())!is.na(match(aname, names(dotsCall)))}}elseeval(substitute(!missing(name)), sys.frame(sys.parent()))}