【发布时间】:2019-06-13 15:41:40
【问题描述】:
给定对函数bar::foo() 的调用,我希望能够以编程方式切换包bar,以便相同的语法调用hello::foo()。
一个例子:
- 假设我有三个包,
parentPkg、childPkg1和childPkg2。 - 在
parentPkg我有一个函数调用childPkg1::foo() -
foo()也是childPkg2中的一个函数 -
我希望能够在
parentPkg中使用::运算符调用foo(),但以编程方式切换包名称。 比如:dummy_pkg_name = ifelse(scenario=="child1", "childPkg1", "childPkg2") dummy_pkg_name::foo()
有可能吗?如何实现?
一些上下文
parentPkg 是一个与 Web 应用程序交互的函数,它接受一些请求和数据,并根据场景从不同的统计模型返回结果。
每个场景都非常复杂,并非所有内容都可以在parentPkg 中概括。出于这个原因,childPkg1 和 childPkg2(实际上也有 3 和 4 个)是处理数据清理和每个场景的各种替代方案但返回相同类别的值的子包。
这个想法是,parentPkg 会根据场景将包切换到相关的子节点,并调用所有必要的函数,而不必为每个子节点编写相同的序列,只是使用稍微不同的 :: 调用。
【问题讨论】:
-
我认为 if(requireNamespace('childPkg1')) 是你真正想要的