我喜欢使用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()
所有这些小的实用功能吗?
也许我需要定义自己的默认命名空间?
答案 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