选择要从 R 包加载的函数

Choose function to load from an R package

我喜欢使用 matlab 包中的函数 reshape,但每次我想对矩阵的元素求和时都需要指定 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() 所有这些小实用功能吗?

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

据我所知,您想要实现的目标没有简单的答案。我能想到的唯一肮脏的 hack 是下载包的源代码 "matlab"、"gtools"、"pracma" 并在从源代码安装之前从它们的 NAMESPACE 文件中删除有问题的函数(使用 R CMD 安装包)。

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

该站点很好地概述了包命名空间: http://r-pkgs.had.co.nz/namespace.html

为了避免破坏您的 ls,您可以这样做:

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