我该如何以编程方式查找R包的数量?

4
每天CRAN提供的软件包数量都在变化。我试图使用以下R代码以编程方式计算软件包的数量:
nrow(installed.packages())

然而,这段代码只返回系统中当前安装的软件包数量。我该如何计算所有软件包的数量?

2个回答

7
> nrow(available.packages())
[1] 13429
> Sys.Date()
[1] "2018-11-29"

您可以在?installed.packages参见部分找到有关available.packages(以及其他相关函数)的信息。


3

您可以使用网络爬虫代码准确计算CRAN随时提供的软件包数量:

library(rvest)

pkgs <- read_html("https://cran.r-project.org/web/packages/available_packages_by_name.html")
mylines <- pkgs %>% 
    html_nodes("tr") %>%
    xml_text()

nb_pkgs <- length(which(sapply(mylines, nchar)>5))
print(paste("There are", nb_pkgs, "packages available in CRAN as of", Sys.Date()))

感谢@Servet!你的代码显示了13515个包,而我用"nrow(installed.packages())"体验到了13477个。我还有一个问题,您知道任何云计算环境可以测试上述代码吗?因为我没有安装R的机器可供使用。我尝试过一些环境,但它们对免费用户提供的时间非常有限,比如每8天只有1小时的使用时间。 - Hakan Yüce
这个答案很聪明,但没有经过充分的审查。例如,当我运行代码时,第一个“package”被计算的是这一行:<tr id="available-packages-A">\n<td></td> </tr>\n,而第560个package是<tr id="available-packages-B">\n<td></td> </tr>\n,即不是packages。此外,默认情况下,available.packages()会进行一些去重处理-请参阅帮助页面以获取详细信息。因此,我认为您在这两种方法之间看到的38个包的差异是26个字母标题和12个available.packages()删除的重复项。 - Gregor Thomas
@Gregor 很好的评论。我更新了我的代码,从最终计数中排除了你提到的这些空行。对于重复项,是否需要取决于最终用户的选择。我的代码提供了整个图片,并且是网络爬虫的一种练习。 - Servet
@HakanYüce 你可以在 melda.io 的云端运行上述代码。这是一个自带 rvest 包的软件即服务,是免费的。你无需安装或下载任何软件。还有 kaggle.com 提供免费且不间断的服务。 - Servet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接