R 确定使用了哪些软件包
有没有一种快速的方法来扫描R脚本并确定实际使用了哪些包?我的意思是查看脚本中调用的所有函数并返回包含这些函数名的包的列表?(我知道函数名不是任何一个包所独有的) 为什么不看看由R 确定使用了哪些软件包,r,R,有没有一种快速的方法来扫描R脚本并确定实际使用了哪些包?我的意思是查看脚本中调用的所有函数并返回包含这些函数名的包的列表?(我知道函数名不是任何一个包所独有的) 为什么不看看由library()或require()调用的包呢?正确的。嗯,我有一个坏习惯,就是加载我经常使用的包,不管我是否在脚本中实际使用它们 我想通过删除未使用的包来清理一些我打算与其他人共享的脚本 我决心在2016年改变我的方式。请帮我开始 更新 评论中有一些好主意 # create an R file that uses a
library()
或require()
调用的包呢?正确的。嗯,我有一个坏习惯,就是加载我经常使用的包,不管我是否在脚本中实际使用它们
我想通过删除未使用的包来清理一些我打算与其他人共享的脚本
我决心在2016年改变我的方式。请帮我开始
更新
评论中有一些好主意
# 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"
答案基于问题评论中的观点。关键函数是
getParseData()
和packageName()
#创建一个使用一些函数的R文件
fileConnI希望这不是迂腐,但是:你能在RStudio中手动取消选中“软件包”菜单中的所有软件包吗。。。然后运行脚本,看看它找不到哪些函数?如果您认识到“哦,melt
needsrestrape2
”,那么您可以进入并将其加载到脚本的顶部。可能是getParseData
,如前所述?我会尝试确定脚本中调用的函数,然后运行它们packageName(环境(函数))
,它应该提供函数的包。接下来,您可以检查已加载的包并将其与实际使用的包对抗。@nicola听起来第一部分应该是getParseData
,然后按照您的描述查找包名……可能的重复:
# load all probable packages first
pkgList <- list(pkgname)
for (i in 1:length(pkgname)) {
try(print(packageName(environment(get(pkgList[[1]][i])))))
}
#[1] "base"
#Error in packageName(environment(get(pkgList[[1]][i]))) :
# 'env' must be an environment
#[1] "base"
#[1] "psych"
# 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"
# load all probable packages first
pkgList <- list(pkgname)
for (i in 1:length(pkgname)) {
try(print(packageName(environment(get(pkgList[[1]][i])))))
}
#[1] "base"
#Error in packageName(environment(get(pkgList[[1]][i]))) :
# 'env' must be an environment
#[1] "base"
#[1] "psych"