2013-07-05 18 views
4

如何從R的等級檢查當前安裝的R是否是最新的?查找已安裝的R版本很容易,但如何檢查最新版本的數量是多少?這種信息是否可以通過CRAN獲得?如何以編程方式檢查當前安裝的R是否是最新的?

+1

這是[CRAN](http://cran.r-project.org/)。你在問如何從R中檢查? – Thomas

+0

@Thomas,是的 - 如何檢查R? – Qbik

回答

5

在我最喜愛的搜索引擎快速搜索發現this post by Yihui Xie,我變成了一個功能:

checkRversion <- function(){ 
    x = readLines("http://cran.r-project.org/sources.html") 
    # the version number is in the next line of 'The latest release' 
    rls = x[grep("latest release", x) + 1L] 
    newver = gsub("(.*R-|\\.tar\\.gz.*)", "", rls) 
    oldver = paste(getRversion(), collapse = ".") 
    # new version available? 
    message("Installed version: ", oldver) 
    message("Latest version: ", newver) 
    compareVersion(newver, oldver) 
} 

在使用中:

checkRversion() 

Installed version: 3.0.1 
Latest version: 3.0.1 
[1] 0 
+1

它也被列在R-FAQs中:http://cran.r-project.org/doc/FAQ/R-FAQ.txt在短語「當前發佈的版本」之後。 – Thomas

3

可以使用的方法從gtools

代碼與Andrie的答案類似,但明確使用/src/base/R文件夾 - 而不是sources.html文件,所以它可能更加健壯,因爲它依賴於實際的二進制文件。

一個小問題是,gtools硬編碼的文件夾名稱,所以「現況」他們的代碼是錯誤的 - 但我很喜歡這個主意,所以我更新了它在可用的CRAN網址迭代,並找到最新的一個:

checkRVersion <- function (quiet = FALSE) 
{ 
    baseUrl <- "http://cran.r-project.org/src/base/R-" 
    majorVersion <- 3 
    repeat { 
     url <- paste(baseUrl, majorVersion, sep = "") 
     if (url.exists(url)) { 
      majorVersion <- majorVersion + 1 
     } 
     else { 
      break 
     } 
    } 

    url <- paste(baseUrl, (majorVersion-1), sep = "") 
    page <- scan(file = url, what = "", quiet = TRUE) 
    matches <- grep("R-[0-9]\\.[0-9]+\\.[0-9]+", page, value = TRUE) 
    versionList <- gsub("^.*R-([0-9].[0-9]+.[0-9]+).*$", "\\1", matches) 
    versionList <- numeric_version(versionList) 

    if (max(versionList) > getRversion()) { 
     if (!quiet) { 
      cat("A newer version of R is now available: ") 
      cat(as.character(max(versionList))) 
      cat("\n") 
     } 
     invisible(max(versionList)) 
    } 
    else { 
     if (!quiet) { 
      cat("The latest version of R is installed: ") 
      cat(as.character(max(versionList))) 
      cat("\n") 
     } 
     invisible(NULL) 
    } 
} 
+0

但R目前在3.0.1 ... – Thomas

+0

好抓!然後解析'sources.html' - 減少麻煩 - 我會保留我的答案,以防萬一有人在這裏遇到'gtools' .. – andreister

+0

從'library(RCurl)',你也可以執行'url.exists(「http:/ /cran.r-project.org/src/base/R-3「)'和'url.exists(」http://cran.r-project.org/src/base/R-4「)等等。直到你有一個'FALSE'。 – Thomas

相關問題