Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列出脚本中所需的所有包,假设R中的package::function()_R_List_Package - Fatal编程技术网

列出脚本中所需的所有包,假设R中的package::function()

列出脚本中所需的所有包,假设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 <

假设脚本中的所有非基R函数都由
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
)功能性抱怨未按字面意思声明或未包含在
说明
中列出的包中的功能。