Error: no se pudo encontrar la función … en R

Esta debe ser una pregunta de preguntas frecuentes, por lo que debe ser lo más completo posible. La respuesta es una respuesta de la comunidad, así que siéntete libre de editar si crees que falta algo.

Esta pregunta fue discutida y aprobada en meta.

Estoy usando R y probé some.function pero recibí el siguiente mensaje de error:

 Error: could not find function "some.function" 

Esta pregunta surge muy regularmente. Cuando obtiene este tipo de error en R, ¿cómo puede resolverlo?

Hay algunas cosas que debe verificar:

  1. ¿Escribiste el nombre de tu función correctamente? Los nombres son sensibles a las mayúsculas
  2. ¿Instalaste el paquete que contiene la función? install.packages("thePackage") (esto solo debe hacerse una vez)
  3. ¿Adjuntaste ese paquete al espacio de trabajo? require(thePackage) o library(thePackage) (esto debe hacerse cada vez que inicie una nueva sesión R)
  4. ¿Estás usando una versión R anterior donde esta función aún no existía?

Si no está seguro de en qué paquete está ubicada esa función, puede hacer algunas cosas.

  1. Si está seguro de que instaló y adjuntó / cargó el paquete correcto, escriba help.search("some.function") o ??some.function para obtener un cuadro de información que le ??some.function en qué paquete está incluido.
  2. find y getAnywhere también se pueden usar para localizar funciones.
  3. Si no tiene ninguna pista sobre el paquete, puede usar findFn en el paquete sos como se explica en esta respuesta .
  4. RSiteSearch("some.function") o la búsqueda con rseek son formas alternativas de encontrar la función.

A veces necesita usar una versión anterior de R, pero ejecuta el código creado para una versión más nueva. Las funciones añadidas recientemente (por ejemplo, hasName en R 3.4.0) no se encontrarán en ese momento. Si usa una versión R anterior y desea usar una función más nueva, puede usar los paquetes de respaldo para hacer que tales funciones estén disponibles. También encontrará una lista de funciones que necesitan ser transferidas al repository git de backports . Tenga en cuenta que las versiones R anteriores a R3.0.0 son incompatibles con los paquetes creados para R3.0.0 y versiones posteriores.

Otro problema, en presencia de NAMESPACE, es que está intentando ejecutar una función no exportada desde el paquete foo .

Por ejemplo (ideado, lo sé, pero):

 > mod < - prcomp(USArrests, scale = TRUE) > plot.prcomp(mod) Error: could not find function "plot.prcomp" 

En primer lugar, no debería llamar directamente a los métodos S3, pero supongamos que plot.prcomp fue realmente una función interna útil en el paquete foo . Llamar a tal función si sabe lo que está haciendo requiere el uso de ::: . También necesita saber el espacio de nombre en el que se encuentra la función. Usando getAnywhere() encontramos que la función está en las estadísticas del paquete:

 > getAnywhere(plot.prcomp) A single object matching 'plot.prcomp' was found It was found in the following places registered S3 method for plot from namespace stats namespace:stats with value function (x, main = deparse(substitute(x)), ...) screeplot.default(x, main = main, ...)  

Entonces ahora podemos llamarlo directamente usando:

 > stats:::plot.prcomp(mod) 

He usado plot.prcomp solo como un ejemplo para ilustrar el propósito. En el uso normal, no deberías estar llamando a métodos S3 como este. Pero como dije, si la función que desea llamar existe (podría ser una función de utilidad oculta, por ejemplo), pero está en un espacio de nombres, R informará que no puede encontrar la función a menos que le diga qué espacio de nombres ver en.

Generalmente puedo resolver este problema cuando una computadora está bajo mi control, pero es más una molestia cuando trabajo con una grilla. Cuando una grilla no es homogénea, no se pueden instalar todas las bibliotecas, y mi experiencia a menudo ha sido que no se instaló un paquete porque no se instaló una dependencia. Para abordar esto, verifico lo siguiente:

  1. ¿Está instalado Fortran? (Busque ‘gfortran’.) Esto afecta a varios paquetes principales en R.
  2. ¿Está Java instalado? ¿Son correctas las rutas de clase de Java?
  3. Verifique que el paquete haya sido instalado por el administrador y disponible para que lo use el usuario apropiado. A veces los usuarios instalarán paquetes en lugares incorrectos o se ejecutarán sin el acceso adecuado a las bibliotecas correctas. .libPaths() es un buen control.
  4. Compruebe los resultados de ldd para R, para estar seguro de las bibliotecas compartidas
  5. Es bueno ejecutar periódicamente un script que solo cargue todos los paquetes necesarios y haga algunas pequeñas pruebas. Esto capta el problema del paquete lo antes posible en el flujo de trabajo. Esto es similar a construir pruebas o pruebas unitarias, excepto que es más como una prueba de humo para asegurarse de que las cosas más básicas funcionen.
  6. Si los paquetes se pueden almacenar en una ubicación accesible para la red, ¿verdad? Si no pueden, ¿hay alguna forma de garantizar versiones uniformes en todas las máquinas? (Esto puede parecer OT, pero la instalación correcta del paquete incluye la disponibilidad de la versión correcta ).
  7. ¿El paquete está disponible para el sistema operativo dado? Desafortunadamente, no todos los paquetes están disponibles en todas las plataformas. Esto vuelve al paso 5. Si es posible, intente encontrar una forma de manejar un SO diferente cambiando a un sabor apropiado de un paquete o apague la dependencia en ciertos casos.

Habiendo encontrado esto bastante, algunos de estos pasos se vuelven bastante rutinarios. Aunque # 7 podría parecer un buen punto de partida, estos se enumeran en orden aproximado de la frecuencia con que los uso.

Si esto ocurre mientras revisa su paquete (verificación R CMD), eche un vistazo a su NAMESPACE.

Puede resolver esto agregando la siguiente instrucción al NAMESPACE:

 exportPattern("^[^\\\\.]") 

Esto exporta todo lo que no comienza con un punto (“.”). Esto le permite tener sus funciones ocultas, comenzando con un punto:

 .myHiddenFunction < - function(x) cat("my hidden function") 

Tuve el error

Error: no se pudo encontrar la función some.function

Sucede al hacer la comprobación R CMD de un paquete que estaba haciendo con RStudio. He encontrado agregar

exportPattern (“.”)

al archivo NAMESPACE hizo el truco. Como nota al margen, inicialmente había configurado RStudio para usar ROxygen para hacer la documentación, y seleccioné la configuración en la que ROxygen escribiría mi archivo NAMESPACE para mí, lo que me permitió borrar mis ediciones. Entonces, en mi instancia desactivé NAMESPACE de la configuración de Roxygen y agregué exportPattern (“.”) A NAMESPACE para resolver este error.

Este error puede ocurrir incluso si el nombre de la función es válido si faltan algunos argumentos obligatorios (es decir, no proporcionó suficientes argumentos).
Obtuve esto en un contexto Rcpp, donde escribí una función C ++ con argumentos opcionales, y no proporcioné esos argumentos en R. Parecía que los argumentos opcionales de C ++ eran vistos como obligatorios por R. Como resultado, R no podía encontrar una función de coincidencia para el nombre correcto pero una cantidad incorrecta de argumentos.

Función Rcpp: SEXP RcppFunction(arg1, arg2=0) {}
R Calls:
RcppFunction(0) aumenta el error
RcppFunction(0, 0) no

Rdocumentation.org tiene una función de búsqueda muy útil que, entre otras cosas, le permite encontrar funciones, de todos los paquetes en CRAN, así como de los paquetes de Bioconductor y GitHub.

enter image description here

Si está utilizando parallelMap , deberá exportar funciones personalizadas a los trabajos esclavos, de lo contrario, obtendrá el error “could not find function”.

Si establece un nivel no perdido en parallelStart el mismo argumento debe pasarse a parallelExport , de lo contrario obtendrá el mismo error. Entonces esto debe ser estrictamente seguido:

 parallelStart(mode = "", N, level = "") parallelExport("", level = "") 

Es posible que pueda corregir este error mediante el espaciado entre nombres :: la llamada a la función

 comparison.cloud(colors = c("red", "green"), max.words = 100) 

a

 wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100) 

Obtuve el mismo error, estaba ejecutando la versión .99xxx, revisé las actualizaciones del menú de ayuda y actualicé My RStudio a 1.0x, luego el error no vino

Solución tan simple, simplemente actualice su R Studio