加载一个功能包

时间:2018-10-22 22:36:27

标签: r

除了一个功能,我想加载整个程序包。

我看到诸如How to load only specific functions from a package之类的解决方法 但这不能满足我的全部需求。

具体的问题是在MASS和tidyverse程序包中加载select()函数,但是我想要一个更通用的解决方案。

谢谢。

2 个答案:

答案 0 :(得分:4)

有3种不错的方法可以使难度增加:

1。 conflicted

它会检查名称冲突,如果这样做会抛出错误,从而阻止您使用屏蔽或屏蔽功能。但是您可以声明整个会话范围的偏好设置,例如:

conflict_prefer("filter", "dplyr")
#> [conflicted] Will prefer dplyr::filter over any other package

conflicted on Github

2。 import

它允许您从包中显式导入特定功能(并根据需要为它们指定一个自定义名称)

import::from(ggplot2, g = ggplot, aes, geom_point)
g(iris, aes(Petal.Width, Petal.Length)) + geom_point()

import on Github

3。 modules

它为您提供了一种Python风格的方式,可以同时导入模块(以R源文件编写)和库,并且更具凝聚力。不错(但很高级)的是,如果模块具有子组,则可以部分加载它们,例如str = import('tools/strings')。但是,这对于包装不起作用,因为它们以整体形式编写。模块在编码准则方面有一些优势,但会迫使您编写:

dplyr = import_package('dplyr')
cars %>% dplyr$filter(speed > 15)

modules on Github

答案 1 :(得分:1)

如果您执行select <- MASS::select,就可以了。

如果您确实不希望在全局工作区中使用它,则可以在附加MASS(可选)和dplyr之后进行:

attach(list(select=MASS::select),name = "front_select")

这样,它将在其他条件之前找到它,因为在搜索路径中将首先遇到环境front_select

那不是很正统。

这是假设您要将此内容用于交互式使用,如果不是绝对要使用::表示法。


实际上,您要的是可能的,尽管这是很多黑巫术,而且我觉得我对此一无所获,但这可以回答问题:

library(dplyr)
x <- as.list(as.environment("package:dplyr"))
detach("package:dplyr")
x$select <- NULL
attach(x,name = "package:dplyr")
mutate
# function (.data, ...) 
# {
#     UseMethod("mutate")
# }
# <bytecode: 0x00000000190069c0>
# <environment: namespace:dplyr>

select
# Error: object 'select' not found

来自?search

  

以“ package:”开头的名称是为库保留的,不应为   由最终用户使用。