【问题标题】:Obtain a package 1st version's date of publication获取软件包第 1 版的发布日期
【发布时间】:2015-03-28 05:25:10
【问题描述】:

R 包的文档仅包含last update/publication 的日期。 版本编号并不遵循所有包的通用模式。 因此,很难一眼就知道包装是旧的还是新的。有时您需要在两个具有相似功能的包之间做出决定,并且知道一个包的年龄可以指导决定。

我的第一个方法是绘制每年的下载量:By traking CRAN downloads。此方法还提供了包的相对流行度/使用情况。但是,这需要大量内存和时间才能继续。因此,我宁愿有一种更快的方法来查看一个包的历史。

有没有一种快速的方法来了解或可视化某个特定包的第一个版本的发布日期,甚至可以一次比较多个包?

目的是促进 R 中所有可用包的心理映射,特别是对于新手。了解包并管理它们可能是人们放弃 R 的主要挑战。

【问题讨论】:

  • 我不会根据年龄来判断一个包裹。这里有几个非常优秀的非常老的 r 程序员。
  • 虽然有趣的是packageDescription 没有任何形式的first published,但我认为您低估了 1) 较旧的软件包,如果它们仍在被谈论,经受住了时间,2) 维护良好的软件包。也就是说,我有兴趣通过packageDescription(pkg)$Date/Publication 了解最近更新 包。
  • 你可以搜索 cran 档案。每个包都有发布日期的每个版本。这不在 R 中(至少通过快速搜索,我还没有找到让 R 列出所有以前版本的方法)方法。但它很快。
  • 我没有歧视旧包。正如 rawr 和 Andrew 所说,他们经受住了时间的考验。有时这正是您想要的经过测试且稳定的软件包。但有时新软件包基于更新的技术。例如 ggplot2, ggplot, gvis...,虽然基本绘图功能很好,但现在有更好的替代方案,使用新语法。
  • 感谢您的cmets和支持。当然,我阅读了文档,这是我大部分时间都在做的事情。但是缺少一块拼图。它们在时间上是如何关联的。目的是促进对 R 中所有可用包的心理映射。但我似乎是唯一一个这样想的人。

标签: r packages release versions


【解决方案1】:

只是为了好玩:

## 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("&nbsp;","",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()

【讨论】:

  • 我拒绝了按包裹日期订购的编辑,但添加了dplyr::arrange 解决方案。我不清楚为什么你需要以这种方式排序的结果?在数据框中要求特定的行顺序是相对不习惯的......
  • 按日期排序的微小添加使numver 在某些特殊情况下遵循正确的模式。如果您查看ggplot2 Archive page,版本 0.5 在 0.5.7 之后。因此,对于某些包,图将经历一个奇怪的峰值,这仅仅是由于 numver 的创建方式。再次感谢arrange@Ben Bolker 的代码和提示!
  • 好的,有道理。
【解决方案2】:

正如 Andrew Taylor 建议的那样,CRAN Archives 包含所有以前的版本,并注明了日期。

【讨论】:

  • 这是确定特定日期在 CRAN 上的软件包的确切版本的绝佳方法。
猜你喜欢
  • 2015-03-30
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多