Esta es una pregunta frecuente, por lo que debe ser lo más completa posible. La respuesta es una respuesta de la comunidad, así que siéntase libre de editar si cree que falta algo.
Estoy usando R y lo intenté, some.function
pero recibí el siguiente mensaje de error:
Error: could not find function "some.function"
Esta pregunta surge con mucha frecuencia. Cuando obtienes este tipo de error en R, ¿cómo puedes resolverlo?
r
function
error-handling
r-faq
Joris Meys
fuente
fuente
R
comando falla, peroq()
! ¡Los consejos serán muy apreciados!Respuestas:
Hay algunas cosas que debe verificar:
install.packages("thePackage")
(esto solo debe hacerse una vez)require(thePackage)
olibrary(thePackage)
(esto debe hacerse cada vez que inicie una nueva sesión de R)Si no está seguro en qué paquete se encuentra esa función, puede hacer algunas cosas.
help.search("some.function")
u??some.function
para obtener un cuadro de información que pueda indicarle en qué paquete está contenido.find
ygetAnywhere
también se puede usar para localizar funciones.findFn
en elsos
paquete como se explica en esta respuesta .RSiteSearch("some.function")
o buscar con rdocumentation o rseek son formas alternativas de encontrar la función.A veces necesita usar una versión anterior de R, pero ejecutar código creado para una versión más nueva. Las funciones recién agregadas (por ejemplo, hasName en R 3.4.0) no se encontrarán entonces. Si usa una versión R anterior y desea usar una función más nueva, puede usar los backports del paquete para que tales funciones estén disponibles. También encontrará una lista de funciones que deben ser retroportadas en el repositorio 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.
fuente
hasName
función enutils
. Sin embargo, estaba usando 3.3.1 yhasName
no me presentaron hasta 3.4.0. Como no puede actualizarutils
como una biblioteca independiente, R / R Studio dijo que no tenía ninguna biblioteca para actualizar.https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
nihttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
digas "introducido en R 3.4.0". Terminé descubriéndolo navegando por los repositorios de github y mirandoblame
utils / R / hasName.R y base / R / match.RRSiteSearch("hasName")
y obtener la misma información. Es por eso que agregué esto hace años a esa respuesta. Es un truco útil para saber ;-)Otro problema, en presencia de un NAMESPACE, es que está intentando ejecutar una función no exportada desde el paquete foo .
Por ejemplo (artificial, lo sé, pero):
En primer lugar, no debería llamar a los métodos S3 directamente, pero supongamos que en
plot.prcomp
realidad era una función interna útil en el paquete foo . Llamar a dicha función si sabe lo que está haciendo requiere el uso de:::
. También necesita saber el espacio de nombres en el que se encuentra la función. UsandogetAnywhere()
encontramos que la función está en las estadísticas del paquete :Entonces ahora podemos llamarlo directamente usando:
Lo he usado
plot.prcomp
solo como ejemplo para ilustrar el propósito. En uso normal, no debería llamar a métodos S3 como este. Pero como dije, si la función a la que desea llamar existe (podría ser una función de utilidad oculta, por ejemplo), pero está en unanamespace
, R informará que no puede encontrar la función a menos que le indique en qué espacio de nombres buscar .Compare esto con lo siguiente:
stats::plot.prcomp
Lo anterior falla porque, mientras lostats
usaplot.prcomp
, no se exportastats
como el error nos dice correctamente:Esto se documenta de la siguiente manera:
fuente
could not find function "anova.lm"
... arreglado con llamadas en sustats:::anova.lm()
lugar:::
ha sido referido como un error de diseño y eso::
es preferible. No se puede encontrar fácilmente la referencia.::
y:::
son diferentes y su edición no funciona . Laplot.prcomp()
función no se exporta desde el espacio de nombres de estadísticas, por lo que debe usarla:::
.Por lo general, puedo resolver este problema cuando una computadora está bajo mi control, pero es más molesto cuando trabajo con una cuadrícula. Cuando una cuadrícula no es homogénea, no todas las bibliotecas pueden instalarse, 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:
.libPaths()
Es un buen cheque.ldd
resultados para R, para asegurarse de las bibliotecas compartidasHabiendo encontrado esto bastante, algunos de estos pasos se vuelven bastante rutinarios. Aunque el # 7 puede parecer un buen punto de partida, estos se enumeran en orden aproximado de la frecuencia con la que los uso.
fuente
Si esto ocurre mientras revisa su paquete (R CMD check), eche un vistazo a su NAMESPACE.
Puede resolver esto agregando la siguiente declaración al NAMESPACE:
Esto exporta todo lo que no comienza con un punto ("."). Esto le permite tener sus funciones ocultas, comenzando con un punto:
fuente
Tuve el error
sucede al hacer la verificación R CMD de un paquete que estaba haciendo con RStudio. Encontré agregar
exportPattern (".")
al archivo NAMESPACE hizo el truco. Como nota al margen, inicialmente configuré RStudio para usar ROxygen para hacer la documentación, y seleccioné la configuración donde ROxygen escribiría mi archivo NAMESPACE para mí, lo que borraba mis ediciones. Entonces, en mi caso, desmarqué NAMESPACE de la configuración de Roxygen y agregué exportPattern (".") A NAMESPACE para resolver este error.
fuente
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 de Rcpp, donde escribí una función de C ++ con argumentos opcionales, y no proporcioné esos argumentos en R. Parecía que R. consideraba que los argumentos opcionales del C ++ eran obligatorios. Como resultado, R no pudo encontrar una función coincidente para el nombre correcto pero un número incorrecto de argumentos.
Función Rcpp:
SEXP RcppFunction(arg1, arg2=0) {}
Llamadas R:
RcppFunction(0)
plantea el errorRcppFunction(0, 0)
nofuente
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 paquetes de Bioconductor y GitHub.
fuente
Si está utilizando
parallelMap
, necesitará exportar funciones personalizadas a los trabajos esclavos, de lo contrario obtendrá un error "no se pudo encontrar la función".Si establece un nivel no perdido en
parallelStart
el mismo argumento, debe pasarloparallelExport
, de lo contrario, obtendrá el mismo error. Entonces esto debe seguirse estrictamente:fuente
Es posible que pueda corregir este error por espaciado de nombre :: la llamada de función
a
fuente
Obtuve el mismo error, estaba ejecutando la versión .99xxx, busqué actualizaciones desde el menú de ayuda y actualicé My RStudio a 1.0x, luego el error no llegó
Solución tan simple, solo actualice su R Studio
fuente