Сколько лет установленному пакету R?

avatar
arnyeinstein
1 июля 2021 в 16:56
45
3
1

Можно ли получить год выпуска установленного пакета R с помощью некоторого кода R? Я могу получить версию, но тогда мне придется искать ее в Интернете, когда эта версия была выпущена. Справочная информация: я работаю в Федеральном статистическом управлении Швейцарии, и небольшая группа пытается улучшить среду R (например, мы работаем с версией 0.7.4 dplyr от 2017 года... и невозможно установить более новую версию). версия...).

Ура

Ренджер

Источник
Jonathan V. Solórzano
1 июля 2021 в 16:59
1

Может быть, с citation("package")?

MrFlick
1 июля 2021 в 17:04
1

Я не знаю никаких существующих способов узнать дату выпуска конкретной версии пакета, кроме просмотра веб-сайта CRAN. Но, возможно, вы можете решить свою проблему по-другому, используя что-то вроде диспетчера пакетов RStudio. С помощью менеджера пакетов вы можете получить URL-адрес репозитория CRAN на определенную дату. Таким образом, вы можете получить все версии пакетов, доступные на эту дату.

Ответы (3)

avatar
Konrad
1 июля 2021 в 17:17
4

Вы можете использовать пакет versions, чтобы получить метку времени версии пакета. Пакет извлекает опубликованные версии пакета с сервера снимков MRAN.

versions::installed.versions("dplyr")
# [1] "1.0.7"
versions::available.versions("dplyr")
# $dplyr
# version       date available
# 1    1.0.7 2021-06-18      TRUE
# 2    1.0.6 2021-05-05      TRUE
# 3    1.0.5 2021-03-05      TRUE
# ...

Возраст пакета

Итак, если вы хотите ответить на конкретный вопрос о возрасте пакета, вы можете сделать следующее:

how_old <- function(pkg, lib = .libPaths()[1], return_age = FALSE) {
    pkg_ver <- versions::installed.versions(pkgs = pkg, lib = lib)
    av_vers <- versions::available.versions(pkgs = pkg)
    pkg_dte <- subset.data.frame(
        x = as.data.frame(unname(av_vers)),
        subset = version == pkg_ver,
        select = date,
        drop = TRUE
    )
    pkg_dte <- as.Date(pkg_dte)
    if (return_age) {
        return(epocakir::dob2age(dob = pkg_dte))
    } else {
        return(pkg_dte)
    }
}

how_old("dplyr", return_age = TRUE)

Результаты

[1] "1123200s (~1.86 weeks)"

Создание пакета

Или если вы хотите узнать, когда пакет был установлен локально.

when_created <- function(pkg, lib = .libPaths()[1]) {
    # Package will always have DESCRIPTION file so that's a safe bet
    desc_file <- system.file("DESCRIPTION", package = pkg, lib.loc = lib)
    info <- fs::file_info(desc_file)
    info$birth_time
}

when_created("dplyr")

Результаты

# [1] "2021-06-25 08:47:21 BST"
avatar
Konrad Rudolph
1 июля 2021 в 17:16
0

В крайнем случае, вы можете узнать, когда пакет был создан из его DESCRIPTION:

packageDescription(pkg)$Packaged

Фактически, citation возвращается к этому самому полю, если не указана другая дата (либо как Date/Publication, либо через явный файл CITATION).

avatar
AndrewGB
1 июля 2021 в 17:08
2

Как рекомендовал @Jonathan, если у пакета есть цитата, вы можете указать год в цитате.

citation("dplyr")$year

В качестве альтернативы можно получить дату из списка доступных версий пакета.

devtools::install_github("https://github.com/cran/versions")
library(versions)

x <- versions::available.versions(c("dplyr", "ggplot2"))

version_year <-
  function(x,
           package.name = "",
           version = "") {
    pckg <- x[[package.name]]
    row <- which(pckg$version == version)
    return(pckg$date[row])
  }

version_year(x, "ggplot2", version = "2.0.0")
#[1] "2015-12-18"
AndrewGB
1 июля 2021 в 17:47
0

Просто добавил альтернативу, используя versions, чтобы получить список доступных версий пакета, из которого вы затем можете получить дату.