r - 使用包中的单个函数
问题描述
使用卸载包中的单个函数
随着时间的流逝,我发现自己在 R 会话开始时加载了越来越多的包。只是加载 tidyverse 加载的包比我以前的标准要多。正因为如此,我发现自己越来越容易受到函数名冲突的影响。特别是当我在包加载过程中没有注意到这些冲突时,这些可能会产生令人困惑的结果和奇怪的错误。所以我想知道我是否可以,一般来说,只导入我想使用的特定功能,而不加载它来自的包。
更准确地说,如果this_pack
是本地安装但未加载的包,并且this_fn()
是 this_pack 中的导出函数,我是否可以安全地期望this_pack::this_fn()
它能够正常工作,并且以与加载整个包时相同的方式工作?我知道它通常会这样做,但我想知道是否有时我应该预期它会失败。
有关其他信息,请参阅相关问题的答案:
我已经接受了 user2554330 的回答,我认为这不是对所引用的其他问题的回答。尽管如此,它们仍然提供了有关使用或不使用 :: 的其他原因的有趣且相关的信息,因此我认为保留交叉引用可能是一个好主意。我已经在上面合并了它们。
解决方案
是的,现在打电话应该总是安全的this_pack::this_fn()
。如果this_pack
没有加载,这将加载它(全部)。(请记住,加载和附加一个包是不同的!加载它会将它放在内存中,但不会放在搜索列表中。附加它会将它放在搜索列表中。)这可能会使第一次调用有点慢,但包会保留加载,因此后续调用会更快。过去的情况是::
,每次调用都需要花费大量时间进行评估,但我认为即时编译基本上已经消除了这一点。但如果你愿意,你可以使用
local_copy <- this_pack::this_fn
local_copy()
然后在不支付::
查找费用的情况下拨打电话。
由于所有包都有名称空间,因此this_pack::this_fn()
(or local_copy()
) 进行的任何调用都将转到正确的位置,除非包的作者非常努力地破坏正常机制。
如果你自己写一个包,你可以只导入那个函数。这将意味着加载你的包将触发加载this_pack
:所以你的加载会有点慢,但第一次调用this_fn()
会更快。
推荐阅读
- r - R - glm() 公式排除有条件的变量
- go - 如何等待 go-routines 完成?
- flutter - 在登录页面上添加循环进度指示器
- node.js - “Runtime.HandlerNotFound:sendEmail.handler 未定义或未导出”我收到此错误。谁能告诉我如何解决它
- javascript - firebase where() 不返回该文档数据?
- sql - 仅当值不为空时才使用 SQL AND
- reactjs - useState 在 Material-ui 中无法正常工作
- python - 当字段限制达到时如何进行嵌入将使新字段继续?
- java - Xamarin.Forms Android 应用程序在安装或更新后首次启动时崩溃
- c - 带有 char 指针的 strsep() 在 c 中给出分段错误