Czy istnieje szybki sposób na zeskanowanie skryptu R i określenie, które pakiety są rzeczywiście używane? Mam tu na myśli przeglądanie wszystkich funkcji wywoływanych w skrypcie i zwracanie listy pakietów zawierających te nazwy funkcji? (Wiem, że nazwy funkcji nie są wyłączne dla jednego pakietu).określają, które pakiety są używane.
Dlaczego nie wystarczy spojrzeć na pakiety wywoływane przez library()
lub require()
? Dobrze. Cóż, mam zły zwyczaj ładowania pakietów, których często używam, niezależnie od tego, czy faktycznie używam ich w skrypcie.
Chciałbym wyczyścić niektóre skrypty, które zamierzam udostępnić innym, usuwając nieużywane pakiety.
Postanawiam zmienić swoje sposoby w 2016 roku. Pomóż mi zacząć.
Aktualizacja
kilka dobrych pomysłów w komentarzach ...
# create an R file that uses a few functions
fileConn<-file("test.R")
writeLines(c("df <- data.frame(v1=c(1, 1, 1), v2=c(1, 2, 3))",
"\n",
"m <- mean(df$v2)",
"\n",
"describe(df) #psych package"),
fileConn)
close(fileConn)
# getParseData approach
pkg <- getParseData(parse("test.R"))
pkg <- pkg[pkg$token=="SYMBOL_FUNCTION_CALL",]
pkg <- pkg[!duplicated(pkg$text),]
pkgname <- pkg$text
pkgname
# [1] "data.frame" "c" "mean" "describe"
Aktualizacja 2
Jest brzydki próba wdrożenia @ Nicola za pomysł:
# load all probable packages first
pkgList <- list(pkgname)
for (i in 1:length(pkgname)) {
try(print(packageName(environment(get(pkgList[[1]][i])))))
}
Nie podoba się funkcja c()
, ale wyniki wydają się być poprawne.
#[1] "base"
#Error in packageName(environment(get(pkgList[[1]][i]))) :
# 'env' must be an environment
#[1] "base"
#[1] "psych"
Mam nadzieję, że to nie jest pedantyczny, ale: czy możesz ręcznie odznaczyć wszystkie pakiety w menu Pakiety w RStudio ... a następnie uruchomić skrypt i zobaczyć, jakie funkcje nie może znaleźć? Jeśli rozpoznasz "Oh,' '' melt''' needs '' 'reshape2'''', możesz wejść i wczytać go u góry skryptu. – Nancy
Może 'getParseData', jak opisano [tutaj] (http://stackoverflow.com/q/33064376/324364)? – joran
Chciałbym spróbować ustalić funkcje wywoływane w skrypcie, a następnie uruchomić nad nim 'packageName (environment (function)), które powinno dać pakiet funkcji. Następnie możesz sprawdzić załadowane pakiety i skonfrontować je z faktycznie używanymi. – nicola