Одним из способов проверки зависимостей во всех функциях является использование байтового компилятора, поскольку это проверяет наличие функций в глобальной рабочей области и выдает уведомление, если оно не находит указанную функцию ,
Так что, если вы в качестве примера использования функции na.locf из пакета зоопарка в любой из ваших функций, а затем байт компиляции функции вы получите сообщение, как это:
Note: no visible global function definition for 'na.locf'
Для правильного ее решения для составления байт вам нужно будет написать его как зоопарк :: na.locf
Так что, чтобы быстро протестировать все функции R в библиотеке/пакете, вы могли бы сделать что-то вроде этого (если вы не писали вызовы другие функции с пространством имен):
Предполагая, что ваши файлы R с функциями в C: \ SomeLibrary \ или подпапок там из, а затем вы определяете sourceing файл как C: \ SomeLibrary.r или аналогичный, содержащий:
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))
затем запустить R с не предустановленными пакеты и источник в C: \ SomeLibrary.r
И тогда вы должны получать заметки от cmpfun для любого вызова функции в пакете, который не является частью базовых пакетов и не имеет полностью определенного пространства имен.
Мне также хотелось бы узнать это! Вы всегда можете отбирать весь список зависимостей и запускать «R CMD check», чтобы узнать, о каких «неустановленных зависимостях» он жалуется, но это тоже не идеально. –
Я подозреваю, что сделаю что-то подобное, но, надеясь на более элегантное решение :-) –
Одним быстрым способом проверки зависимостей функций является байт, который компилирует их, потому что если вы не дадите пространствам имен команд, которые из пакетов он будет жаловаться, что он недоступен в глобальном масштабе. – Hansi