获取包第一版的发布日期
Obtain a package 1st version's date of publication
R 包的文档仅包含 last update/publication 的日期。
版本编号并不遵循所有包的通用模式。
因此,很难一眼看出包是旧的还是新的。有时您需要在具有相似功能的两个包之间做出决定,了解包的使用年限可以指导您做出决定。
我的第一个方法是绘制每年的下载量:By traking CRAN downloads。此方法还提供了包的相对 popularity/usage。但是,这需要大量内存和时间才能继续。因此,我宁愿有一种更快的方式来查看一个包的历史。
有没有一种快速了解或可视化某个特定软件包的第一个版本发布日期甚至一次比较多个软件包的方法?
目的是促进对 R 中所有可用包的心理映射,尤其是对于新手。了解包并管理它们可能是人们放弃 R 的主要挑战。
正如 Andrew Taylor 所建议的,CRAN Archives 包含所有以前的版本并标明了日期。
纯属娱乐:
## not all repositories have the same archive structure!
archinfo <- function(pkgname,repos="http://www.cran.r-project.org") {
pkg.url <- paste(contrib.url(repos),"Archive",pkgname,sep="/")
r <- readLines(pkg.url)
## lame scraping code
r2 <- gsub("<[^>]+>"," ",r) ## drop HTML tags
r2 <- r2[-(1:grep("Parent Directory",r2))] ## drop header
r2 <- r2[grep(pkgname,r2)] ## drop footer
strip.white <- function(x) gsub("(^ +| +$)","",x)
r2 <- strip.white(gsub(" ","",r2)) ## more cleaning
r3 <- do.call(rbind,strsplit(r2," +")) ## pull out data frame
data.frame(
pkgvec=gsub(paste0("(",pkgname,"_|\.tar\.gz)"),"",r3[,1]),
pkgdate=as.Date(r3[,2],format="%d-%b-%Y"),
## assumes English locale for month abbreviations
size=r3[,4])
}
AERinfo <- archinfo("AER")
lme4info <- archinfo("lme4")
comb <- rbind(data.frame(pkg="AER",AERinfo),
data.frame(pkg="lme4",lme4info))
我们无法直接比较包裹编号,因为每个人使用不同的编号方案...
library(dplyr) ## overkill
comb2 <- comb %>% group_by(pkg) %>% mutate(numver=seq(n()))
如要按包裹日期安排:
comb2 <- arrange(comb2,pkg,pkgdate)
漂亮的照片...
library(ggplot2); theme_set(theme_bw())
ggplot(comb2,aes(x=pkgdate,y=numver,colour=pkg))+geom_line()
R 包的文档仅包含 last update/publication 的日期。 版本编号并不遵循所有包的通用模式。 因此,很难一眼看出包是旧的还是新的。有时您需要在具有相似功能的两个包之间做出决定,了解包的使用年限可以指导您做出决定。
我的第一个方法是绘制每年的下载量:By traking CRAN downloads。此方法还提供了包的相对 popularity/usage。但是,这需要大量内存和时间才能继续。因此,我宁愿有一种更快的方式来查看一个包的历史。
有没有一种快速了解或可视化某个特定软件包的第一个版本发布日期甚至一次比较多个软件包的方法?
目的是促进对 R 中所有可用包的心理映射,尤其是对于新手。了解包并管理它们可能是人们放弃 R 的主要挑战。
正如 Andrew Taylor 所建议的,CRAN Archives 包含所有以前的版本并标明了日期。
纯属娱乐:
## not all repositories have the same archive structure!
archinfo <- function(pkgname,repos="http://www.cran.r-project.org") {
pkg.url <- paste(contrib.url(repos),"Archive",pkgname,sep="/")
r <- readLines(pkg.url)
## lame scraping code
r2 <- gsub("<[^>]+>"," ",r) ## drop HTML tags
r2 <- r2[-(1:grep("Parent Directory",r2))] ## drop header
r2 <- r2[grep(pkgname,r2)] ## drop footer
strip.white <- function(x) gsub("(^ +| +$)","",x)
r2 <- strip.white(gsub(" ","",r2)) ## more cleaning
r3 <- do.call(rbind,strsplit(r2," +")) ## pull out data frame
data.frame(
pkgvec=gsub(paste0("(",pkgname,"_|\.tar\.gz)"),"",r3[,1]),
pkgdate=as.Date(r3[,2],format="%d-%b-%Y"),
## assumes English locale for month abbreviations
size=r3[,4])
}
AERinfo <- archinfo("AER")
lme4info <- archinfo("lme4")
comb <- rbind(data.frame(pkg="AER",AERinfo),
data.frame(pkg="lme4",lme4info))
我们无法直接比较包裹编号,因为每个人使用不同的编号方案...
library(dplyr) ## overkill
comb2 <- comb %>% group_by(pkg) %>% mutate(numver=seq(n()))
如要按包裹日期安排:
comb2 <- arrange(comb2,pkg,pkgdate)
漂亮的照片...
library(ggplot2); theme_set(theme_bw())
ggplot(comb2,aes(x=pkgdate,y=numver,colour=pkg))+geom_line()