选择要从R包加载的功能

时间:2015-02-27 14:32:02

标签: r function namespaces package rename

我喜欢使用reshape包中的函数matlab,但每次我想要对矩阵的元素求和时,我都需要指定base::sum(m),否则matlab::sum被调用,只按列总和..

我需要加载包gtools才能使用rdirichlet函数,但函数gtools::logit会屏蔽我更喜欢的函数pracma::logit

我没有这样的事情:

library(loadOnly = "rdirichlet", from = "gtools")

library(loadEverythingFrom = "matlab", except = "sum")

..因为包matlab中的函数可能会在matlab::sum函数内部工作。所以后者必须加载。但是从用户的角度来看,没有办法获得这种行为吗?感觉像是:

library(pracma)
library(matlab)
library(gtools)
sum <- base::sum
logit <- pracma::logit

..但是这不会破坏你的ls()所有这些小的实用功能吗?

也许我需要定义自己的默认命名空间?

2 个答案:

答案 0 :(得分:3)

为避免破坏ls,您可以执行以下操作:

.ns <- new.env()
.ns$sum <- base::sum
.ns$logit <- pracma::logit
attach(.ns)

答案 1 :(得分:1)

据我所知,你想要达到的目标并不容易。我能想到的唯一肮脏的黑客是下载软件包“matlab”,“gtools”,“pracma”的源代码,并在从源代码(使用R CMD INSTALL软件包)安装之前从他们的NAMESPACE文件中删除有问题的函数。 / p>

但是,我建议使用显式符号pracma :: logit,因为它可以提高代码对其他人和您自己的可读性。

此站点提供了有关包名称空间的良好概述: http://r-pkgs.had.co.nz/namespace.html