gpt4 book ai didi

r - 如何从 CRAN 中提取所有包作者的姓名

转载 作者:行者123 更新时间:2023-12-04 00:56:06 25 4
gpt4 key购买 nike

为了庆祝 标签中的第 100,000 个问题,我想创建一个 CRAN 上所有包作者姓名的列表。

最初,我认为我可以使用 available.packages() 来做到这一点,但遗憾的是这不包含作者的专栏。

pdb <- available.packages()
colnames(pdb)

[1] "Package" "Version" "Priority"
[4] "Depends" "Imports" "LinkingTo"
[7] "Suggests" "Enhances" "License"
[10] "License_is_FOSS" "License_restricts_use" "OS_type"
[13] "Archs" "MD5sum" "NeedsCompilation"
[16] "File" "Repository"

此信息在每个包的 DESCRIPTION 文件中可用。所以我可以想到两种蛮力方式,都不是很优雅:
  • 下载每个 6,878 包并使用 DESCRIPTION
  • 读取 base::read.dcf() 文件
  • 抓取 CRAN 上的每个包页面。例如,https://cran.r-project.org/web/packages/MASS/index.html 告诉我 Brian Ripley 是 MASS 的作者。

  • 我不想下载所有的 CRAN 来回答这个问题。而且我也不想抓取 HTML,因为描述文件中的信息是一个格式整齐的 person 对象列表(参见 ?person )。

    如何使用 CRAN 上的信息轻松构建软件包作者列表?

    最佳答案

    取自 reverse_dependencies_with_maintainers ,它在 R developer site 上有一点可用(我现在在那里看不到):

      description <- sprintf("%s/web/packages/packages.rds",
    getOption("repos")["CRAN"])
    con <- if(substring(description, 1L, 7L) == "file://") {
    file(description, "rb")
    } else {
    url(description, "rb")
    }
    db <- as.data.frame(readRDS(gzcon(con)),stringsAsFactors=FALSE)
    close(con)
    rownames(db) <- NULL

    head(db$Author)
    head(db$"Authors@R")

    Authors@R 存在的地方,它可能可以使用 dget() 解析成更好的东西
    getAuthor <- function(x){
    if(is.na(x)) return(NA)
    a <- textConnection(x)
    on.exit(close(a))
    dget(a)
    }
    authors <- lapply(db$"Authors@R", getAuthor)
    head(authors)

    [[1]]
    [1] NA

    [[2]]
    [1] "Gaurav Sood <gsood07@gmail.com> [aut, cre]"

    [[3]]
    [1] "Csillery Katalin <kati.csillery@gmail.com> [aut]"
    [2] "Lemaire Louisiane [aut]"
    [3] "Francois Olivier [aut]"
    [4] "Blum Michael <michael.blum@imag.fr> [aut, cre]"

    [[4]]
    [1] NA

    [[5]]
    [1] "Csillery Katalin <kati.csillery@gmail.com> [aut]"
    [2] "Lemaire Louisiane [aut]"
    [3] "Francois Olivier [aut]"
    [4] "Blum Michael <michael.blum@imag.fr> [aut, cre]"

    [[6]]
    [1] NA

    关于r - 如何从 CRAN 中提取所有包作者的姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31568278/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com