R语言入门秘录25/25:访问包中的函数

数据分析网整理自tbkken的《R语言入门25招》,一招招技能带你走进R语言。

问题

某个包已经安装好了,可能是安装R时就安装好了的标准包,或者是自己下载的包。如果直接在R中使用包中的函数,R会告诉你,它找不到这个函数。

解决方案

用library函数或者require函数将包加载到R中:

> library(packagename)

讨论

R本身自带了很多包,但并不是所有的包都会在R启动时就自定加载。类似的,可以从CRAN上下载和安装所需的包,但这些包也不会自动的加载到R中。例如,MASS包是R自带的,但如果直接使用其中的lda函数就会遇到这个问题:

> lda(x) 
Error: could not find function "lda" #错误:找不到“lda”函数

R会报错,说它在已加载到内存的包中找不到lda函数。

在用library函数或者require函数时,R就会将相应的包加载到内存中,你就可以使用其中的函数、数据等各种东西:

> lda(f ~ x + y)
Error: could not find function "lda" 
> library(MASS) 
> lda(f ~ x + y) 
Call:
lda(f ~ x + y)
Prior probabilities of groups: 
. 
. (省略) 
.

在调用library之前,R无法识别这个函数名。在调用之后,就可以使用包中的东西,也就可以调用lda函数了。

要注意,不需要将包名称放在引号中。

require函数几乎跟library一模一样,但在编写脚本时它有两个有用的特性。如果包加载成功,它会返回TRUE,否则就会返回FALSE。如果包加载失败,require会发出警告,而library会报错。

这两个函数都一个共同的关键特性:他们不会加载已加载的包,所以调用这两个函数将同一个包加载两次并没有什么害处。这在编写脚本的时候很有用。在脚本中可以加载各种所需的包,而无需考虑这些包是否已经被加载。

detach函数可以将已加载的包卸载(unload):

> detach(package:MASS)

必须要明确地指定包名称,例如package:MASS。

如果某个包的函数跟搜索路径中靠后的某个同名函数发生冲突,就需要将其卸载。在发生这种冲突时,高优先级的函数就会掩盖低优先级的函数。R在找到高优先级的函数后就会停止搜索,你也就“看”不到低优先级的函数了。所以,这时候如果要使用低优先级的函数,就要把高优先级的包卸载。

扩展阅读

关于搜索路径,详见search函数。

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(1)
上一篇 2016-01-19 14:53
下一篇 2016-02-01 15:00

相关文章

关注我们
关注我们
分享本页
返回顶部