Una forma de comprobar las dependencias en todas las funciones es utilizar el compilador de bytes porque eso verificará las funciones disponibles en el espacio de trabajo global y emitirá un aviso si no encuentra dicha función .
Así que si usted como ejemplo utiliza la función na.locf del paquete zoológico en cualquiera de sus funciones y, a continuación Byte compilar su función obtendrá un mensaje como este:
Note: no visible global function definition for 'na.locf'
Para abordar correctamente para la compilación de bytes debe escribirlo como zoo :: na.locf
Así que una forma rápida de probar todas las funciones R en una biblioteca/paquete podría hacer algo como esto (suponiendo que no haya escrito las llamadas a otras funciones con el espacio de nombres):
Suponiendo que los archivos de R con las funciones se encuentran en C: \ SomeLibrary \ o subcarpetas de allí y luego se definen un archivo sourceing como C: \ SomeLibrary.r o similar que contiene:
if (!(as.numeric(R.Version()$major) >=2 && as.numeric(R.Version()$minor) >= 14.0)) {
stop("SomeLibrary needs version 2.14.0 or greater.")
}
if ("SomeLibrary" %in% search()) {
detach("SomeLibrary")
}
currentlyInWorkspace <- ls()
SomeLibrary <- new.env(parent=globalenv())
require("compiler",quietly=TRUE)
pathToLoad <- "C:/SomeLibraryFiles"
filesToSource <- file.path(pathToLoad,dir(pathToLoad,recursive=TRUE)[grepl(".*[\\.R|\\.r].*",dir(pathToLoad,recursive=TRUE))])
for (filename in filesToSource) {
tryCatch({
suppressWarnings(sys.source(filename, envir=SomeLibrary))
},error=function(ex) {
cat("Failed to source: ",filename,"\n")
print(ex)
})
}
for(SomeLibraryFunction in ls(SomeLibrary)) {
if (class(get(SomeLibraryFunction,envir=SomeLibrary))=="function") {
outText <- capture.output(with(SomeLibrary,assign(SomeLibraryFunction,cmpfun(get(SomeLibraryFunction)))))
if(length(outText)>0){
cat("The function ",SomeLibraryFunction," produced the following compile note(s):\n")
cat(outText,sep="\n")
cat("\n")
}
}
}
attach(SomeLibrary)
rm(list=ls()[!ls() %in% currentlyInWorkspace])
invisible(gc(verbose=FALSE,reset=TRUE))
A continuación, iniciar la I sin precargado paquetes y fuente en C: \ SomeLibrary.r
Y luego debe obtener notas de cmpfun para cualquier llamada a una función en un paquete que no es parte de los paquetes base y no tiene un espacio de nombres completamente calificado.
¡Me encantaría saber esto también! Siempre puede eliminar toda la lista de dependencias y ejecutar 'R CMD check' para ver de qué" dependencias no declaradas "se queja, pero tampoco es lo ideal. –
Sospecho que terminaré haciendo algo así, pero manteniendo la esperanza de una solución más elegante :-) –
Una forma rápida de verificar la dependencia de la función es compilarla en byte porque si no le das a los espacios de nombres los comandos que provienen de paquetes, se quejarán de que no está disponible en un ámbito global. – Hansi