除了一个功能,我想加载整个程序包。
我看到诸如How to load only specific functions from a package之类的解决方法 但这不能满足我的全部需求。
具体的问题是在MASS和tidyverse程序包中加载select()函数,但是我想要一个更通用的解决方案。
谢谢。
答案 0 :(得分:4)
有3种不错的方法可以使难度增加:
conflicted
它会检查名称冲突,如果这样做会抛出错误,从而阻止您使用屏蔽或屏蔽功能。但是您可以声明整个会话范围的偏好设置,例如:
conflict_prefer("filter", "dplyr")
#> [conflicted] Will prefer dplyr::filter over any other package
import
它允许您从包中显式导入特定功能(并根据需要为它们指定一个自定义名称)
import::from(ggplot2, g = ggplot, aes, geom_point)
g(iris, aes(Petal.Width, Petal.Length)) + geom_point()
modules
它为您提供了一种Python风格的方式,可以同时导入模块(以R源文件编写)和库,并且更具凝聚力。不错(但很高级)的是,如果模块具有子组,则可以部分加载它们,例如str = import('tools/strings')
。但是,这对于包装不起作用,因为它们以整体形式编写。模块在编码准则方面有一些优势,但会迫使您编写:
dplyr = import_package('dplyr')
cars %>% dplyr$filter(speed > 15)
答案 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:”开头的名称是为库保留的,不应为 由最终用户使用。