基于 11 个最常见的用户问题介绍 R 软件包。
R 包是由社区开发 (developed by the community) 的功能 (functions) 和数据集(data sets) 的集合。它们通过改进现有的基本 R 功能或通过添加新功能来提升 R 的效率。例如,如果您经常使用数据框,可能您会听说 dplyr 或 data.table 这两个最流行的 R 包。
但是想象一下,您想要对韩文的文本进行一些自然语言处理,从网络中提取天气数据,甚至使用地表能量平衡模型(land surface energy balance models)估算实际蒸散量,R 包都可以帮到您!截止最近,R 的官方存储库(CRAN)已经发布的包就接近了 10,000 个,除此以外还有更多通过互联网公开发布的其他 R 包。
如果您刚开始使用 R,今天的文章将介绍 R 软件包的基础知识以及如何使用它们。您将涵盖以下主题和 11 个常见问题用户问题:
如果您是一位经验丰富的用户,您可以随时学习新内容(例如我在前一段中提到的三个软件包的名称)。无论如何,欢迎阅读 R 包的介绍以及如何使用它们!
让我们从一些定义开始。包是用于组织您自己工作的一种合适方式(a suitable way),如果您愿意,也可以与他人分享。通常,包将包含代码(不仅仅 是 R 代码!),包及内部函数相关的文档,一些以检查一切是否正常工作的测试(some tests to check everything works as it should),以及数据集。
DESCRIPTION 文件 提供了有关包的基本信息,您可以在其中找到包的功能,作者是谁,文档所属的版本,日期,使用的许可类型以及包依赖性。
除了查找诸如 cran.r-project.org 或 stat.ethz.ch 之类的 DESCRIPTION 文件之外,您还可以使用命令 packageDescription("package") 通过包帮助文档访问 R 中的描述文件help(package = "package"),或在线访问存储库(repository)中 R 包。
例如,对于 “stats” 包,这些方法将是:
packageDescription("stats")
help(package = "stats")
存储库(repository)是包所在的位置,因此您可以从存储库中安装 R 包。虽然您或您的组织可能拥有本地存储库,但通常它们是在线并且可供所有人访问的。R 软件包最受欢迎的三个存储库是:
如何安装软件包取决于它的位置。因此,对于公开可用的包,这意味着它属于哪个存储库。最常见的方法是使用 CRAN 存储库,然后只需要包的名称并使用命令install.packages("package")。
例如,y 已经在 CRAN 中发布,并且仍然在线并正在更新的最早的软件包是来自 Daniel Adler 的 vioplot 软件包。
你能找到它的发布日期吗?线索:在包装说明中。
要从 CRAN 安装它,您只需要使用:
install.packages("vioplot")
运行上面的命令后,您将在屏幕上收到一些消息。它们将取决于您使用的操作系统,依赖性以及是否成功安装了包。让我们深入了解一下 vioplot 安装的输出,你可能得到的一些消息是:
Installing package into ‘/home/username/R/x86_64-pc-linux-gnu-library/3.3’(as ‘lib’ is unspecified)
这表示您的计算机上安装了软件包的位置,您可以使用 lib 参数提供不同的文件夹位置。
trying URL 'https://cran.rstudio.com/src/contrib/vioplot_0.2.tar.gz'Content type 'application/x-gzip' length 3801 bytes ==================================================downloaded 3801 bytes
在这里,您将收到有关包裹的来源和大小的信息。这取决于您选择的 CRAN 镜像。您也可以更改它,但稍后您将在本文中阅读更多相关内容。
- installing source package ‘vioplot’ ...
R preparing package for lazy loading
** help
installing help indices
* building package indices
testing if installed package can be loaded- DONE (vioplot)
这些是安装本身的消息,源代码,帮助,一些测试,最后是一切顺利的消息,并且包已成功安装。根据您的平台,这些消息可能有所不同。
The downloaded source packages are in ‘/tmp/RtmpqfWbYL/downloaded_packages’
最后一条信息告诉您下载后包的原始文件位于何处。它们不是使用包所必需的,因此通常它们是被复制到了临时文件夹位置。最后,要一次安装多个包,只需在 install.packages() 函数的第一个参数中将它们写为字符向量:
install.packages(c("vioplot", "MASS"))
请记住,CRAN 是一个服务器网络(每个服务器称为”镜像(mirror)”),因此您可以指定要使用的服务器。如果您通过 RGui 接口使用 R,则可以通过从使用 install.packages() 命令后出现的列表中选择它来完成。在 RStudio 上,默认情况下已选择镜像。
您还可以使用 chooseCRANmirror() 选择镜像,或使用 repo 参数直接在 install.packages()函数内选择镜像。您可以使用 getCRANmirrors() 查看可用镜像列表。
示例:要使用 Ghent University Library 镜像(比利时)安装 vioplot 软件包,您可以运行以下命令:
install.packages("vioplot", repo = "https://lib.ugent.be/CRAN/")
对于 Bioconductor,安装包的标准方法是首先执行以下脚本:
source("https://bioconductor.org/biocLite.R")
这将安装安装 bioconductor 包所需的一些基本功能,例如 biocLite() 函数。如果你想安装 Bioconductor 的核心软件包,只需输入它而不需要进一步的参数:
biocLite()
但是,如果您只对此存储库中的一些特定包感兴趣,则可以直接键入它们的名称作为字符向量:
biocLite(c("GenomicFeatures", "AnnotationDbi"))
如上所述,每个存储库都有自己的方法安装各自对应的包,因此,如果您经常使用来自不同来源的包,这可能会有点令人沮丧。更有效的方法可能是使用 devtools 包来简化此过程,因为它包含了每个存储库的特定功能,包括 CRAN。
您可以像往常一样使用 install.packages("devtools") 安装 devtools,但您可能还需要在 Windows 上安装 Rtools,在 Mac 上安装 Xcode 命令行工具,或在 Linux 上安装 r-base-dev 和 r-devel。
安装 devtools后,您将能够使用实用程序功能来安装另一个软件包。选项是:
例如,要从其 github 存储库安装 babynames 包,您可以使用:
devtools::install_github("hadley/babynames")
在你花费更多时间使用 R 之后,你每周甚至每天都会使用 install.packages()几次是正常的,考虑到 R 软件包的开发速度,你可能需要更新或者更换你心爱的 R 包。在本节中,您将找到一些可以帮助您管理集合的功能。
要检查计算机上已经安装的 R 软件包,您可以使用:
installed.packages()
使用 remove.packages() 函数卸载软件包非常简单:
remove.packages("vioplot")
您可以通过调用函数来检查需要更新的软件包:
old.packages()
您可以使用以下命令更新所有包:
update.packages()
对于特定的包,只需再次使用 install.packages() 即可升级:
install.packages("vioplot")
如果您更喜欢图形用户界面来安装包,则 RStudio 和 RGui 都包含它们。在 RStudio 中,您可以在”工具” -> “安装包”中找到它,然后您将在弹出窗口中键入要安装的包:
在 RGui 中,您将在”包(Packages)”菜单下找到实用程序。
安装软件包后,您就可以使用其功能了。如果您只需要在包中偶尔使用一些函数或数据,则可以使用符号 packagename::functionname() 来访问它们。例如,由于您已安装 babynames包,因此可以浏览其中一个数据集。
您还记得如何查看包中包含哪些功能和数据的概述?是的,help(package = "babynames") 可以告诉你这个。
要访问 babynames包中的 births 数据集,只需键入:
babynames::births
# A tibble: 119 x 2
year births
1 1909 2718000
2 1910 2777000
3 1911 2809000
4 1912 2840000
5 1913 2869000
6 1914 2966000
7 1915 2965000
8 1916 2964000
9 1917 2944000
10 1918 2948000
# ... with 109 more rows
如果您将更密集地使用该软件包,那么可能值得将其加载到内存中。最简单的方法是使用library() 命令。
请注意,install.packages() 的输入是一个字符向量,并且要求名称在引号中,而 library()接受字符或名称,这使您可以编写没有引号的包名称。
在此之后,您不再需要 package::function() 表示法,并且您可以像其他任何 R 基本函数或数据一样直接访问其功能:
library(babynames)
> births
# A tibble: 119 x 2
year births
1 1909 2718000
2 1910 2777000
3 1911 2809000
4 1912 2840000
5 1913 2869000
6 1914 2966000
7 1915 2965000
8 1916 2964000
9 1917 2944000
10 1918 2948000
# ... with 109 more rows
您可能已经听说过 require()函数:确实可以使用此函数加载包,但区别在于如果未安装包,它不会引发错误。所以请仔细使用此功能!
说到 library() 函数,有时候包和库之间会有混淆,有时候你可以返现人们会把库(libraries)也叫成包(packages)。
请不要混淆:library() 是用于加载包的命令,它指的是包含包的位置,通常是计算机上的文件夹,而包(package)是方便地捆绑的函数的集合。
也许可以引用来自 RStudio 的首席数据科学家 Hadley Wickham 以及 “Writing functions in R” DataCamp 课程讲师的对话说明一下:
关于这两者之间的区别,一个更好的例子是运行不带参数的 library()。它将为您提供计算机上不同库中安装的软件包列表:
library()
虽然您可以在 install.packages() 函数中输入一组名称向量来同时安装多个包,但在library() 函数的情况下,这是不可能的。您可以一次加载一组软件包,或者如果您愿意,可以使用 R 用户开发的众多解决方法之一。
您可以在 this Stack Overflow discussion,this R package 和 this GitHub repository 中找到示例。
要卸除已加载的包,可以使用 detach() 函数。
detach("package:babynames", unload=TRUE)
正如您在上面的部分中所读到的那样,DESCRIPTION 文件包含有关包的基本信息,即使该信息非常有用,也无法帮助您使用此包进行分析。然后,您将需要另外两个文档源:帮助文件和小品文(vignettes)。
与基础的 R一样,命令 ?() 和 help() 是开始使用软件包时的第一个文档源。你可能记得你可以使用 help(package="packagename") 来获得包的一般概述,但是如果尚未加载包得情况下,每个函数都可以通过 help(“name of the function”) 或 help(function, package=“package”) 来单独探讨,您通常会在其中找到函数及其参数的描述以及应用程序示例。
例如,您可能记得要从 vioplot包中获取 vioplot命令的帮助文件,您可以键入:
help(vioplot, package = "vioplot")
提示:您还可以使用其他方式查看已加载包中的内容。如使用 ls()命令:
library(babynames)
ls("package:babynames")
[1] "applicants" "babynames" "births" "lifetables"
大多数软件包中包含的另一个非常有用的帮助来源是小品文(Vignettes),这些小文件是作者以更详细的方式显示其软件包的一些功能的文档。跟随着小品文是一个可以让你手把手去熟悉 R 包常见用途的好方法,所以在做您自己的分析之前,这是一个开始使用它的完美方法。
您可能还记得,给定包中包含的 vignettes 信息也可以在本地或在线的 DOCUMENTATION 文件中找到,但您也可以使用函数 browseVignettes() 获取已安装包中包含的所有 vignettes 列表。对于想要获取某一个特定 package 的 vignettes,我们只需要输入一个该包的名称作为参数即可:browseVignettes(package =”packagename”)。上面的这两种情况下,都会打开一个浏览器窗口,以便您可以轻松地浏览或者点击您喜欢的 vignette 进去查看。
如果您希望留在命令行中,则可以使用 vignette()命令显示所有的 vignettes 列表,vignette(package = "packagename") 命令可以查看某一个指定包中包含的 vignettes 内容。找到所需的内容后探索,只需使用vignette(“vignettename”) 命令,即可查看该 vignettename 的详细信息 。
例如,ggplot2 是最受欢迎的可视化包之一。您可能已经在计算机上安装了它,但如果没有,这是您实现它并测试新的 install.packages()技能的机会。
假设您已经安装了 ggplot2,您可以检查其中包含的 vignettes :
vignette(package = "ggplot2")
Vignettes in package ‘ggplot2’:
ggplot2-specs Aesthetic specifications (source, html)
extending-ggplot2 Extending ggplot2 (source, html)
(END)
ggplot2 有两个 vignettes:”ggplot2-specs” 和 “extends-ggplot2”。您可以通过以下方式检查第一个:
vignette("ggplot2-specs")
在 RStudio 上,这将显示在右侧的 “帮助” 选项卡上,而在 RGui 或命令行中,这将打开带有 vignette 的浏览器窗口。
此时,你应该可以安装并从你的 R 包中获得最大的收益,但仍然有一个最后的问题:你在哪里找到你需要的软件包?
发现包的典型方法是通过学习 R,在许多教程和课程中,通常会提到最流行的包。DataCamp 课程在这里就是一个很好的例子:”Cleaning Data in R” 教授了所有关于 ‘tidyr’ 包的使用知识,”Data Analysis in R, the data.table Way” 讲述如何使用 data.table 包进行数据处理,等等。
对于您想要通过 R 中去解决的每个主题,您可以找到一个有趣的包。但是如果你有一个特定的问题并且你不知道从哪里开始怎么办,例如,正如我在这篇文章的介绍中所说的那样,如果你有兴趣分析一些韩文的文本怎么办?或者如果你想收集一些天气数据怎么办?或估计蒸发蒸腾量?
您已经查看了几个存储库,是的,您也知道在这里可以查看 CRAN 包列表,但是有超过 10000 个选项,很容易你就迷失方向了。
让我们来看看一些替代方案!
由于 CRAN 具有任务视图,一种替代方案可以是浏览 CRAN 包的类别。那就对了!CRAN 官方存储库,还为您提供浏览包的选项。任务视图基本上是基于其功能对包进行分组的主题或类别。
如您所见,所有与遗传有关的包都将在 “遗传学(Genetics)” 任务视图中进行分类:
以韩语文本为例,您可以通过导航到自然语言处理任务视图轻松找到所需的包。在那里,您可以阅读文本以查找可以处理文本的包,或者您可以执行简单的 CTRL + F 并键入您要查找的关键字。保证,您可以立即获得正确的包!
查找软件包的另一种方法可以是 RDocumentation,它是来自 CRAN,BioConductor 和 GitHub 的 R 软件包的帮助文档聚合器,它直接在主页面上为我们提供了搜索框。
你可能还不知道这第二种选择,所以让我们深入挖掘一下!让我们从韩语文本开始,RDocumentation 的一个有趣特性是快速搜索,所以当你输入一点点关键字时会就出现第一与之匹配的结果:
但是,如果您输入关键词 “korean” 并单击”搜索”,我们将进行完整搜索,您将获得两列结果:左侧的包,右侧的功能。
关注 packages 列,我们可以在每个结果中获取到包的名称,包含更详细信息的链接,作者姓名,也可链接以查看来自同一作者的其他包,以及带有搜索关键字高亮显示的包的一些描述,以及有关包的流行度的信息。
谈到流行度,这是紧密相关的,因为搜索将首先对下载次数最多的包进行排名,以提高结果的准确性。 因此,似乎 KoNLP 软件包可以满足您的需求,点击其名称后,您将获得以下信息:
RDocumentation 不仅是一个搜索引擎,它还为您提供了一些更好的选择来发现和了解 R 包和函数:
直接在 R 或 RStudio 面板上使用 RDocumentation 比网站使用提供了一些优势:
install.packages("RDocumentation")
library(RDocumentation)
help(package = "vioplot")
remove.packages("vioplot")
help(package = "vioplot")
install.packages("vioplot")
help(vioplot)
本文章涵盖了广泛的通过使用包来从 R 中获得最大收益的相关技术(techniques)和功能(functions)。像往常一样,在 R 中执行某项任务的方法不止一种,管理包也不例外。
我希望今天您已经学习了最常用的和一些替代方法来发现,安装,加载,更新,获取帮助或删除软件包。
我知道这篇文章没有详细介绍有关包的内部结构或如何创建自己的包。请继续关注 DataCamp 的博客以及这些和其他主题相关的课程。
我差点忘了,如果你通过搜索 RDocumentation 还没有发现什么东西,我可以告诉你,使用weatherData 你可以从互联网上提取天气数据,如果你对蒸发蒸腾感兴趣,也许你应该看看Evapotranspiration, water 或 SPEI 包。
原文:https://www.datacamp.com/community/tutorials/r-packages-guide
作者:Adolfo Álvarez
本文版权(文字和图片)属于“生信私房菜”(微信公众号:BioInit),禁止二次转载。部分图片来源于网络,如有侵权请联系删除。