【发布时间】:2015-04-30 07:21:04
【问题描述】:
我喜欢使用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() 与所有这些小实用功能?
也许我需要定义自己的默认命名空间?
【问题讨论】:
-
对于两个名称冲突的包,在较高位置
library(..., pos = number)加载的包将优先。您可以使用search()查看包裹的位置。如果您要在低于gtools的位置加载pracma,那么您的logit应该是您想要的。我不知道如何解决base::sum问题。我认为你最好只使用library::function语法来调用你想要的函数。 -
@Vlo 太糟糕了。但是感谢
pos的技巧,这会有所帮助.. :) -
您可以在脚本顶部使用
.Rprofile文件和/或.onLoad()函数来组织搜索路径 -
请注意包'pracma'有一个
Reshape函数,用大写字母避免与stats::reshape冲突。
标签: r function namespaces package rename