繁体   English   中英

使用包中的单个功能

[英]Using single functions from a package

使用已卸载软件包中的各个功能

随着时间的流逝,我发现自己在R会话开始时加载了越来越多的软件包。 仅加载tidyverse会加载比以前更多的软件包。 因此,我发现自己越来越有可能受到函数名称冲突的打击。 尤其是当我在程序包加载过程中没有注意到那些冲突时,它们可能会造成令人困惑的结果和奇怪的错误。 因此,我想知道我是否可以总体上仅导入要使用的特定功能,而无需加载其附带的软件包。

更准确地说,如果this_pack是在本地安装但未加载的软件包,并且this_fn()this_fn()中的导出函数,我可以放心地期望this_pack::this_fn()正常工作,并以与原来相同的方式工作如果整个包裹都装好了? 我知道通常会发生这种情况,但是我想知道是否有时我会期望它失败。

有关其他信息,请参见相关问题的答案:

我已经接受了user2554330的答案,我认为这不是对所引用的其他问题的答案。 尽管如此,它们还是提供了有关是否使用::的其他原因的有趣且相关的信息,因此我认为保留交叉引用可能是一个好主意。 我已经在上面合并了它们。

是的,如今,调用this_pack::this_fn()应该总是安全的。 如果未加载this_pack ,则将加载它(全部)。 (请记住,加载和附加程序包是不同的!加载它会将其存储在内存中,而不是在搜索列表中。附加它会将其放在搜索列表中。)这可能会使第一个调用有点慢,但该程序包会保留下来已加载,因此后续调用会更快。 过去,在每次调用中评估::花费了相当多的时间,但我认为即时编译已基本消除了这种情况。 但是,如果需要,您可以使用

local_copy <- this_pack::this_fn

然后调用local_copy()而无需再次支付::查找。

由于所有程序包都有名称空间,因此除非程序包的作者真的努力颠覆常规机制,否则this_pack::this_fn() (或local_copy() )进行的任何调用都将到达正确的位置。

如果您自己编写一个程序包,则可以仅导入该功能。 这意味着加载您的包将触发this_pack的加载:这样您的加载会慢一些,但是第一次调用this_fn()会更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM