imd 统计教程 · 统计软件与R工具链
← 教程首页 返回本模块

如何能又全又快地找到所需方法的R包?

聂志强实战医学统计2023-11-22 21:18:24广东

截止202311月R官网共计2.0万个package,学R其实大部分时间都在调包,也就是“调包侠”。新学R的小伙伴们可能遇到这2万多个package,第一时间就犯了选择困难症。

请问如何能又快又好的找到所需方法的R包?

这也是小编一直想去深入挖掘的问题,今天抽空研究了一遍。

其实,CRAN上一直存在这里的问题,R的最大的局限就是R包碎片化。2万个R包就像地摊货一样丢在CRAN上,带来3个污染眼球的问题。

①信息冗余:当使用CRAN进行检索时,可能会遇到大量的搜索结果。逐一查看查看CRAN (https://cran.r-project.org/web/views/Survival.html)或https://cran.r-project.org/web/packages/available_packages_by_name.html#available-packages-S 或https://cran.r-project.org/web/packages/available_packages_by_date.html,这些结果以了解它们的功能和用途将花费大量时间和精力。

②R包质量参差不齐:难以确定下载量和更新日期等方面的信息,哪个R包最适合自己的需求,R包的质量和可靠性需要估计。

③CRAN排序功能少:默认时间或name排序可能并不符合用户的期望,许多优秀的R包被埋没在庞大不相关或低质量的包海中。

因此,是否能够根据关键词快速、准确地检索到相关R包,同时提供一定程度的结果筛选和排序功能?

一、 搜索某方法R包

1.1 excel法


#获取CRAN上package的数据库
set.seed(11)
p_db<-tools::CRAN_package_db()
#查看有多少packages
dim(p_db)
#截止20231121,共20072个
#查看p_db中包的信息
#View(p_db)
#----对p_db进行清洗、预处理!强大----
package_db <- cranly::clean_CRAN_db(p_db)
save(p_db,file = "p_bd.rdata")
save(package_db,file = "package_db.rdata")
#----方法1,CRAN_package_db 手动excel----
write.csv(p_db, file="D:/聂个人文件/我的公众号/R包下载量/R包下载.csv")

##1.1----总重要性top30----
plot(package_summaries, according_to = "degree", top = 30)
#plot(package_summaries, according_to = "n_imported_by", top = 30)

1.2 CRAN网页法


1.3 cranly包名

1.4 推荐!自定义函数top_CRAN_pkg

#CRAN网站抓取R包列表后需要分批次读取下载量
#本公众号耗时30分钟更新好,很费劲啊!
load(file = "D:/聂个人文件/我的公众号/R包下载量/total_downloads_by_package.rdata")
pacman::p_load(tools,dlstats,cranly,dplyr)
#----3.获取CRAN上package的数据库,合并----
set.seed(11)
p_db<-tools::CRAN_package_db()
p_db$package <- p_db$Package
#查看有多少packages
#dim(p_db)
#使用 merge 函数合并数据框,不同行;新增count列
p_dbpool <- merge(p_db, total_downloads_by_package, by = "package", all = TRUE)
#该函数的主要参数包括:
#char:您输入的关键词,ignore.case默认为TRUE不区分大小写。
#top:返回结果的数量,默认为10;Description:是否在R包描述中搜索关键词,默认为TRUE。
d <- p_dbpool[,c(1,40,69)]
top_CRAN_pkg <- function(char, ignore.case = TRUE, top = 10, Description = TRUE){
# 初始化 topcran_1month
topcran_1month <- data.frame(package = character(), count = numeric(), Description = character(),stringsAsFactors = FALSE)
if(Description){
if(ignore.case){
# 查询包描述文件
a1 <- grep(char, d$Description, ignore.case = TRUE, value = TRUE)
d1 <- d %>%
filter(Description %in% unique(a1))
# 查询包名
a2 <- grep(char, d$package, ignore.case = TRUE, value = TRUE)
d2 <-
d %>%
filter(package %in% a2)

topcran_1month <- rbind(d1, d2) %>%
.[!duplicated(.$package),] %>%
arrange(desc(count)) %>%
head(top)
}
else{
# 查询包描述文件
a1 <- grep(char, d$Description, ignore.case = FALSE, value = TRUE)
d1 <- d %>%
filter(Description %in% unique(a1))

# 查询包名
a2 <- grep(char, d$package, ignore.case = FALSE, value = TRUE)
d2 <-
d %>%
filter(package %in% a2)

topcran_1month <- rbind(d1, d2) %>%
.[!duplicated(.$package),] %>%
arrange(desc(count)) %>%
head(top)
}
}
else{
if(ignore.case){
# 查询包描述文件
a1 <- grep(char, d$Description, ignore.case = TRUE, value = TRUE)
d1 <- d %>%
filter(Description %in% unique(a1))

# 查询包名
a2 <- grep(char, d$package, ignore.case = TRUE, value = TRUE)
d2 <-
d %>%
filter(package %in% a2)

topcran_1month <- rbind(d1, d2) %>%
.[!duplicated(.$package),] %>%
arrange(desc(count)) %>%
head(top) %>%
select(-4)

}else{
# 查询包描述文件
a1 <- grep(char, d$Description, ignore.case = FALSE, value = TRUE)
d1 <- d %>%
filter(Description %in% unique(a1))

# 查询包名
a2 <- grep(char, d$package, ignore.case = FALSE, value = TRUE)
d2 <-
d %>%
filter(package %in% a2)

topcran_1month <- rbind(d1, d2) %>%
.[!duplicated(.$package),] %>%
arrange(desc(count)) %>%
head(top) %>%
select(-4)
}
}
# 返回 topcran_1month 数据集
assign("topcran_1month", topcran_1month, envir = .GlobalEnv)
return(topcran_1month)
}
# 查询与ROC相关的R包,返回前10个结果,区分大小写
#缩写大写
top_CRAN_pkg(char='ROC',ignore.case = F,top = 10,Description = TRUE)[,c(1,3)]
#全称
top_CRAN_pkg(char='receiver operating characteristic curve',ignore.case = F,top = 10,Description = TRUE)[,c(1,3)]
# 查询与rcs相关的R包,top10,不区分大小写
top_CRAN_pkg(char='Restricted Cubic Spline',ignore.case = TRUE, top = 10,Description = TRUE)[,c(1,3)]
#新发现RCS包
#devtools::install_github("crtahlin/peRiodiCS")

二、小结

获取你想要某方法的R包,CRAN官网搜索最懒,excel筛选自由度高但很卡,top_CRAN_pkg搜索最全最快


PS:如需要本章节案例百度网盘文件,total_downloads_by_package.rdata ,请公众号后台发送: 20231122 

原创不易,觉得好请帮忙转发朋友圈分享加个赞。