2012-05-11 9 views
6

Duplicar posibles:
How do you you determine the namespace of a function?nombre de un paquete para una función dada en I

no sé cómo hacer esto ... ¿Cómo sabe el nombre del paquete para una cierta función en R? Me gustaría tener una función que, dado el nombre de una función, devuelva el nombre del paquete que lo posee. ¿Cualquier sugerencia?

+0

@Andrie Bien manchado. Dado que todos los paquetes ahora tienen un espacio de nombre, la Respuesta de hadley en el enlace de Preguntas y Respuestas que me llama la atención es la mejor solución. –

+0

@GavinSimpson: ¿Por qué es mejor que 'findFunction'? (Estoy tratando de imaginarme explicando a un alumno por qué deberían usar 'getNamespaceName (environment (foo))' en lugar de 'findFunction (foo)' - el primero parece un poco mágico, y si no tiene un significado significativo ventajas ...) –

+1

@BenBolker 'find()' & 'findFunction()' don; t devuelve * solo * el nombre del espacio de nombres (de ahí el paquete). Sus resultados necesitan un procesamiento posterior. Hadley's solo devuelve el nombre del paquete como personaje. Preferiría que para escribir una función o programación, pero para el código de usuario los otros están bien. –

Respuesta

6

Puede haber mejores soluciones, pero find("functionname") parece funcionar razonablemente bien? Sin embargo, solo funciona para paquetes cargados.

> find("strwidth") 
[1] "package:graphics" 
> find("qplot") 
character(0) 
> library(ggplot2) 
> find("qplot") 
[1] "package:ggplot2" 
> 

(Si necesita el nombre del paquete en bruto puede utilizar gsub("^package:","",results))

(Las respuestas a la pregunta anterior unido por Andrie incluyen esta respuesta; no dan lo de gsub, y todos ellos parecen compartir el problema de no encontrar paquetes no cargado)

Aquí un corte rápido para encontrar funciones incluso en paquetes sin carga:.

findAllFun <- function(f) { 
    h <- help.search(paste0("^",f,"$"),agrep=FALSE) 
    h$matches[,"Package"] 
} 

findAllFun("qplot") 
## "ggplot2" 
findAllFun("lambertW") 
## "emdbook" "VGAM" 
> findAllFun("xYplot") 
## "Hmisc" "lattice" 

Si necesita encontrar funciones en los paquetes instalados (es decir buscando CRAN), entonces findFn del paquete sos será su amigo.

+0

y ¿qué pasa con los paquetes no cargados? – Nestorghh

Cuestiones relacionadas