function - varias - vector unitario
¿Hay una manera de obtener un vector con el nombre de todas las funciones que uno podría usar en R? (2)
Me gustaría tener una llamada que me devuelva un vector con los nombres de todas las funciones que podría llamar en la sesión R actual. ¿Alguien sabe como lograr esto?
(Me gustaría verificar las variables ingresadas por el usuario con este vector. Tuvimos algún problema inesperado con los usuarios que ingresaron, por ejemplo, c
como nombres de variables)
ACTUALIZACIÓN: Me gustaría obtener los nombres de las funciones de todos los paquetes cargados actualmente.
SOLUCIÓN (a mitad de camino): basado en la sugerencia de Joris Meys con lsf.str()
me ocurrió la siguiente función que devuelve un vector ordenado con todos los nombres de funciones disponibles actualmente:
getFunctionNames <- function() {
loaded <- (.packages())
loaded <- paste("package:", loaded, sep ="")
return(sort(unlist(lapply(loaded, lsf.str))))
}
Bu, t vea también los comentarios en la publicación de Joris Meys para respuestas aún mejores.
Pedí una Q similar en R-Help hace muchas lunas (2007) y el Prof. Brian Ripley proporcionó esto como una solución:
findfuns <- function(x) {
if(require(x, character.only=TRUE)) {
env <- paste("package", x, sep=":")
nm <- ls(env, all=TRUE)
nm[unlist(lapply(nm, function(n) exists(n, where=env,
mode="function",
inherits=FALSE)))]
} else character(0)
}
pkgs <- dir(.Library)
z <- lapply(pkgs, findfuns)
names(z) <- pkgs
Z <- sort(unique(unlist(z)))
Lo que da salida como:
> head(Z)
[1] "^" "-" "-.Date" "-.POSIXt" ":" "::"
Esto fue para encontrar todas las funciones en los paquetes especificados por paquetes de objetos para que pueda controlar los paquetes que se cargan / verifican.
Una versión modificada que funciona en el conjunto de paquetes cargados actualmente sería:
findfuns2 <- function(pkgs) {
nm <- ls(pkgs, all = TRUE)
nm[unlist(lapply(nm, function(n) exists(n, where = pkgs,
mode = "function",
inherits = FALSE)))]
if(isTRUE(all.equal(length(nm), 0)))
character(0)
else
nm
}
pkgs <- search()
pkgs <- pkgs[grep("package:", pkgs)]
z <- lapply(pkgs, findfuns2)
z <- sort(unique(unlist(z)))
head(z)
lsf.str()
como un comienzo.
por ejemplo: x <- as.character(lsf.str("package:base"))
le da una lista de todas las funciones en el paquete base. Podrías agregar todos los paquetes contra los que quieras verificar. stats
y utils
vienen a la mente primero.
EDITAR: con respecto a su pregunta sobre los paquetes cargados actualmente:
x <- unlist (sapply (búsqueda () [- 1], función (x) como.caracter (lsf.str (x)))) ver comentarios
pkgs <- search()
pkgs <- pkgs[grep("package:",pkgs)]
y <- unlist(sapply(pkgs,lsf.str))
Hace el truco.