确定所有包依赖项的最小R版本
发布时间:2020-12-14 04:55:56 所属栏目:百科 来源:网络整理
导读:我是一个软件包开发人员,想要说明在DESCRIPTION文件中使用我的软件包所需的最低R版本. available.packages解析包的描述,但结果不是(容易)机器可读的查找递归依赖,因为Imports和Depends字段是逗号分隔文本,有时包含包有版本要求. 解决方案描述于: Listing R
我是一个软件包开发人员,想要说明在DESCRIPTION文件中使用我的软件包所需的最低R版本.
available.packages解析包的描述,但结果不是(容易)机器可读的查找递归依赖,因为Imports和Depends字段是逗号分隔文本,有时包含包有版本要求. 解决方案描述于: 至少,我希望看到给定CRAN包的R和导入,链接和依赖包的最低版本.更好的是列出设置最小R或包版本的包或包. 通过消除具有更高版本要求的依赖关系,我可以为更多人提供他们无法解决的系统旧R版本:一些仍然在R 2.x. 解决方法min_r_version <- function(package="ggplot2",exclude_main_pkg=TRUE) { purrr::walk(c("tools","purrr","devtools","stringi","tidyr","dplyr"),require,character.only=TRUE) deps <- package_dependencies(package,recursive=TRUE) if (exclude_main_pkg) { pkgs <- deps[[1]] } else { pkgs <- c(package,deps[[1]]) } available.packages() %>% as_data_frame() %>% filter(Package %in% pkgs) %>% select(Depends) %>% unlist() -> pkg_list # if main pkg only relied on core R packages (i.e. pkgs that aren't in CRAN) and we # excluded the pkg itself from the min version calculation,this is an edge case we need # to handle. if (length(pkg_list) == 0) return("Unspecified") stri_split_regex(pkg_list,"[,]") %>% unlist() %>% trimws() %>% stri_match_all_regex(c("^R$|^R (.*)$")) %>% unlist() %>% discard(is.na(.)) %>% unique() %>% stri_replace_all_regex("[R >=()]","") %>% data_frame(vs=.) %>% separate(vs,c("a","b","c"),fill="right") %>% mutate(c=ifelse(is.na(c),c)) %>% arrange(a,b,c) %>% tail(1) %>% unite(min,a:c,sep=".") -> vs return(vs$min) } # did we handle the edge cases well enought? base <- c("base","compiler","datasets","grDevices","graphics","grid","methods","parallel","profile","splines","stats","stats4","tcltk","tools","translations") (base_reqs <- purrr::map_chr(base,min_r_version)) ## [1] "Unspecified" "Unspecified" "Unspecified" "Unspecified" "Unspecified" ## [6] "Unspecified" "Unspecified" "Unspecified" "Unspecified" "Unspecified" ## [11] "Unspecified" "Unspecified" "Unspecified" "Unspecified" "Unspecified" # a few of the "core" contributed pkgs rely on a pkg or two outside of base # but many only rely on base packages,to this is another gd edge case to # text for. contrib <- c("KernSmooth","MASS","Matrix","boot","class","cluster","codetools","foreign","lattice","mgcv","nlme","nnet","rpart","spatial","survival") contrib_reqs <- purrr::map_chr(contrib,min_r_version) ## [1] "Unspecified" "Unspecified" "3.0.0" "Unspecified" "3.1.0" ## [6] "Unspecified" "Unspecified" "Unspecified" "Unspecified" "3.0.2" ## [11] "3.0.0" "Unspecified" "Unspecified" "Unspecified" "3.0.1" # See what the min version of R shld be for some of my pkgs min_r_version("ggalt") # I claim R (>= 3.0.0) in DESCRIPTION ## [1] "3.1.2" min_r_version("curlconverter") # I claim R (>= 3.0.0) in DESCRIPTION ## [1] "3.1.2" min_r_version("iptools") # I claim R (>= 3.0.0) in DESCRIPTION ## [1] "3.0.0" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |