列出脚本中所需的所有包,假设R中的package::function()
假设脚本中的所有非基R函数都由列出脚本中所需的所有包,假设R中的package::function(),r,list,package,R,List,Package,假设脚本中的所有非基R函数都由package::function()调用。因此,在脚本运行期间,它没有任何完整的包负载。假设我们有一个名为run.R的R脚本,包含以下内容 "data.table::fread(file)" 在本例中,脚本需要data.table包。我正在寻找一个R函数,读取此外部run.R脚本将提供安装所有请求的软件包的代码,即: install.packages("data.table") 对现有的函数或策略有什么想法吗?您可以使用regex尝试类似的方法: f <
package::function()
调用。因此,在脚本运行期间,它没有任何完整的包负载。假设我们有一个名为run.R
的R脚本,包含以下内容
"data.table::fread(file)"
在本例中,脚本需要data.table
包。我正在寻找一个R函数,读取此外部run.R
脚本将提供安装所有请求的软件包的代码,即:
install.packages("data.table")
对现有的函数或策略有什么想法吗?您可以使用regex尝试类似的方法:
f <- file("/path/to/here/file.R") # set up connection to file
file_lines <- readLines(con = f) # read file into list
close(f)
pckgs <- lapply(file_lines, function(l) {
if(grepl("::", l)){
gsub(".*?([[:alnum:]\\.]+)::.*","\\1", l)
} else {
return(NULL)
}
})
unique(unlist(pckgs))
f您可以使用regex尝试以下操作:
f <- file("/path/to/here/file.R") # set up connection to file
file_lines <- readLines(con = f) # read file into list
close(f)
pckgs <- lapply(file_lines, function(l) {
if(grepl("::", l)){
gsub(".*?([[:alnum:]\\.]+)::.*","\\1", l)
} else {
return(NULL)
}
})
unique(unlist(pckgs))
f这里有一个函数,它可以查找像package::function
这样的字符串
findPackages <- function(file){
txt <- readLines(file)
inx <- grep('::', txt)
txt <- txt[inx]
m <- regexpr('[[:alnum:]]+::', txt)
pkg <- regmatches(txt, m)
unique(sub('::', '', pkg))
}
现在将函数应用于调用类似函数的文件
findPackages(fls[1])
以及使用bash命令找到的所有此类文件
pkgs <- lapply(fls, findPackages)
unique(unlist(pkgs))
pkgs这里有一个函数,它可以查找像package::function
这样的字符串
findPackages <- function(file){
txt <- readLines(file)
inx <- grep('::', txt)
txt <- txt[inx]
m <- regexpr('[[:alnum:]]+::', txt)
pkg <- regmatches(txt, m)
unique(sub('::', '', pkg))
}
现在将函数应用于调用类似函数的文件
findPackages(fls[1])
以及使用bash命令找到的所有此类文件
pkgs <- lapply(fls, findPackages)
unique(unlist(pkgs))
pkgs如果正则表达式出现在注释或字符串文本中,则使用正则表达式的其他解决方案也将匹配:
。最好是解析脚本并查找解析到pkg::fn
操作的内容。例如:
src如果正则表达式出现在注释或字符串文本中,则使用正则表达式的其他解决方案也将匹配:
。最好是解析脚本并查找解析到pkg::fn
操作的内容。例如:
src强调我真正的脚本在磁盘上,需要我没有列出的包,这一点很重要。因此,在本例中,我希望自动搜索我需要的所有包。手动阅读正是我试图避免的,但我将如何发现脚本中包含哪些包?抱歉,我可能误读了您的问题,尽管非常详细,R的检查(也使用devtools::CHECK
)功能性抱怨未按字面意思声明或未包含在说明
中列出的包中的功能。必须强调的是,我的真实脚本在磁盘上,需要我没有列出的包。因此,在本例中,我希望自动搜索我需要的所有包。手动阅读正是我试图避免的,但我将如何发现脚本中包含哪些包?抱歉,我可能误读了您的问题,尽管非常详细,R的检查(也使用devtools::CHECK
)功能性抱怨未按字面意思声明或未包含在说明
中列出的包中的功能。