28

Stack Overflowのタグで20,000番目の質問を祝うために、ウィキペディアのページからRのリリース日を抽出するのを手伝ってください。

私の試み:

library(XML)
x <- readHTMLTable("http://en.wikipedia.org/wiki/R_(programming_language)")

テーブルは実際にはリストであり、HTMLテーブルではないため、これは機能しません。

library(httr)
x <- GET("http://en.wikipedia.org/wiki/R_(programming_language)")
text <- content(x, "parsed")

これでテキストが抽出されますが、xpath錆びているため、関連するリリース日を抽出できませんでした。

これどうやってするの?


PS。ウィキペディアのページは私が見つけた唯一の情報源ですが、正規の情報源がある場合は、それを使用して解決策を投稿してください。

4

5 に答える 5

23

ウィーンの正規FTPアーカイブにあるファイルの日付を使用してみませんか?

編集:例:

 lynx -dump http://cran.r-project.org/src/base/R-0/ | grep tgz | grep -v http

Rから解析できるテーブルを取得します。利点としてファイルサイズを取得します。R-1およびR-2ディレクトリをすすぎ、繰り返します。

于 2012-11-26T15:03:15.640 に答える
21

Rバージョン3.0.0以降を含むように編集

Dirk Eddelbuettelは、Rの.0リリースへの正規リンクを提供しました。

メジャーリリースごとに1つずつ、3つの別々のURLからテーブルを照合し、それをプロットするコードを次に示します。

library(XML)
library(lattice)


getRdates <- function(){
  url <- paste0("http://cran.r-project.org/src/base/R-", 0:3)
  x <- lapply(url, function(x)readHTMLTable(x, stringsAsFactors=FALSE)[[1]])
  x <- do.call(rbind, x)
  x <- x[grep("R-(.*)(\\.tar\\.gz|\\.tgz)", x$Name), c(-1, -5)]
  x$Release <- gsub("(R-.*)\\.(tar\\.gz|tgz)", "\\1", x$Name)
  x$Date <- as.POSIXct(x[["Last modified"]], format="%d-%b-%Y %H:%M")
  x$Release <- reorder(x$Release, x$Date)
  x
}

x <- getRdates()
dotplot(Release~Date, data=x)

ここに画像の説明を入力してください

于 2012-11-26T16:10:57.763 に答える
16

一種の不正行為ですが、Dirkが私たちに簡単にこすり落とすことができるようになりました。

library(XML)
theurl <- "http://cran.r-project.org/src/base/R-0/"
h <- htmlParse(theurl)
h <- readHTMLTable(h)
h <- h[[1]]
h <- droplevels(h[-c(1,2,30),])
levels(h$Name) <- gsub(".tgz","",levels(h$Name),fixed=TRUE)

h

私たちに与える:

         Name     Last modified Size Description
3      R-0.49 23-Apr-1997 14:53 959K            
4   R-0.50-a1 22-Jul-1997 16:44 1.0M            
5   R-0.50-a4 10-Sep-1997 14:31 1.0M            
6    R-0.60.0 04-Dec-1997 09:58 1.1M            
7    R-0.60.1 07-Dec-1997 02:59 1.1M            
8    R-0.61.0 22-Dec-1997 00:00 1.1M            
9    R-0.61.1 13-Jan-1998 00:00 1.1M            
10   R-0.61.2 18-Mar-1998 00:00 1.1M            
11   R-0.61.3 03-May-1998 00:00 1.1M            
12   R-0.62.0 15-Jun-1998 00:00 1.2M            
13   R-0.62.1 15-Jun-1998 00:00 1.2M            
14   R-0.62.2 10-Jul-1998 11:59 1.3M            
15   R-0.62.3 28-Aug-1998 11:01 1.3M            
16   R-0.62.4 24-Oct-1998 00:00 1.3M            
17   R-0.63.0 14-Nov-1998 04:57 1.5M            
18   R-0.63.1 05-Dec-1998 02:25 1.5M            
19   R-0.63.2 12-Jan-1999 02:21 1.5M            
20   R-0.63.3 06-Mar-1999 04:27 1.5M            
21   R-0.64.0 08-Apr-1999 01:48 1.5M            
22   R-0.64.1 08-May-1999 02:55 1.9M            
23   R-0.64.2 05-Jul-1999 21:15 1.9M            
24   R-0.65.0 28-Aug-1999 00:18 2.1M            
25   R-0.65.1 07-Oct-1999 01:46 2.2M            
26   R-0.90.0 22-Nov-1999 18:07 2.3M            
27   R-0.90.1 15-Dec-1999 14:05 2.4M            
28   R-0.99.0 07-Feb-2000 13:09 2.8M            
29  R-0.99.0a 09-Feb-2000 12:28 2.8M    
于 2012-11-26T15:23:22.550 に答える
7

そして、すでに行われた作業に基づいて構築します。

h <- getRdates()
# Find version release rate
library(plyr)
h <- subset(h,select=c(-Description))
Version <- sub("^R-([0-9a-z.-]+)\\.t.*","\\1",h$Name)
h$bigVersion <- as.numeric(sub("^([0-9])\\..+","\\1",Version))
h$smallVersion <- as.numeric(sub("^[0-9]\\.([0-9]+).+","\\1",Version))
h$majorVersion <- as.numeric(paste(h$bigVersion,sprintf( "%02.0f", h$smallVersion ),sep="."))
h <- ddply( h, .(bigVersion,majorVersion), function(x) {
    x$tinyVersion <- seq(nrow(x))
    x
})

# Plot
plot( majorVersion~Date, data=h, pch=".",cex=3)
abline(h=seq(1,2),col="red")

料金

library(lattice)
print(xyplot( smallVersion~Date|bigVersion, data=h, pch=".",cex=3))

格子

そして、すべてを一緒に比較します:

h <- ddply( h, .(bigVersion), function(x) {
   x$bigElapsedTime <- x$Date - min(x$Date)
   x
})

png("c:/temp/Rplot3.png")
plot( smallVersion~bigElapsedTime, data=h, pch=".",cex=3,col=h$bigVersion+1)
dev.off()

すべてを1つのプロットに

# How many minor releases per major release

> table(rle(h$majorVersion)$lengths, substring(rle(h$majorVersion)$values,1,1))

    0 1 2
  1 1 0 0
  2 5 5 9
  3 1 1 6
  4 2 4 1
  5 1 0 0
于 2012-11-26T16:42:30.557 に答える
4

このためにウィキペディアをこする必要はもうありません。

library(rversions)
r_versions()
于 2016-02-03T21:38:23.620 に答える