Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式检查当前安装的R是否是最新安装的?_R_Cran - Fatal编程技术网

如何以编程方式检查当前安装的R是否是最新安装的?

如何以编程方式检查当前安装的R是否是最新安装的?,r,cran,R,Cran,如何从R级别检查当前安装的R是否是最新的?查找已安装R的版本很容易,但如何检查最新版本的编号?这类信息可以通过CRAN获得吗?在我最喜欢的搜索引擎中快速搜索,我找到了一个功能: checkRversion <- function(){ x = readLines("http://cran.r-project.org/sources.html") # the version number is in the next line of 'The latest release' rl

如何从R级别检查当前安装的R是否是最新的?查找已安装R的版本很容易,但如何检查最新版本的编号?这类信息可以通过CRAN获得吗?

在我最喜欢的搜索引擎中快速搜索,我找到了一个功能:

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)
}
您可以使用来自的方法

该代码与Andrie的答案中的代码类似,但明确使用了
/src/base/R
文件夹,而不是
sources.html
文件,因此它可能更健壮,因为它依赖于存在的实际二进制文件

一个小问题是,
gtools
硬编码了文件夹名称,因此“按原样”他们的代码是错误的-但我非常喜欢这个想法,所以我更新了它,以迭代可用的CRAN URL并找到最新的:

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)
    }
}

checkRVersion已打开。你是在问如何在R中进行检查吗?@Thomas,是的-如何在R中进行检查?它也列在R-FAQ中:“当前发布的版本是”。很好!然后解析
sources.html
就不那么麻烦了-我会保留我的答案,以防有人在这里遇到
gtools
。从
library(RCurl)
,你也可以做
url.exists(“http://cran.r-project.org/src/base/R-3“
url.存在(”http://cran.r-project.org/src/base/R-4)
,等等,直到你得到一个
FALSE
。我的意思是,你可以将其构建到你的代码中,使其在主要版本之间具有灵活性(检查是否存在下一个主要版本,如果不存在,则获取最新的次要版本)。有意义-我更新了答案,现在看起来更灵活了:)
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)
    }
}