测试是否在R模块中

测试是否在R模块中,r,module,scope,conditional-statements,R,Module,Scope,Conditional Statements,我正在探索R模块,我想知道是否有一种方法可以检查函数是否在模块内运行(请注意,不仅仅是定义的,而是在模块内运行的) 我的用例是,我有一个脚本,有时作为普通的R脚本,有时作为模块使用modules::use()。我想在此脚本中包装包加载,以便在正常调用时使用library,在模块中运行时使用modules::import()。找到了一种方法来覆盖库函数: environmentName(environment()) == "modules:root" 在定义函数的环境中调用,

我正在探索R模块,我想知道是否有一种方法可以检查函数是否在模块内运行(请注意,不仅仅是定义的,而是在模块内运行的)


我的用例是,我有一个脚本,有时作为普通的R脚本,有时作为模块使用
modules::use()
。我想在此脚本中包装包加载,以便在正常调用时使用
library
,在模块中运行时使用
modules::import()

找到了一种方法来覆盖库函数:

environmentName(environment()) == "modules:root"

在定义函数的环境中调用,而不是在函数本身中调用。

找到了一种方法,可以使
模块
重写库函数:

environmentName(environment()) == "modules:root"

在定义函数的环境中调用,而不是在函数本身中调用。

无耻的插件:“box”包也实现了模块系统,使这一过程变得轻松:
if(is.null(box::name())…
。美好的干得好!它是否也会自动安装丢失的软件包?那将是额外的帮助!不,这是一个需要考虑的活跃主题,但我不认为常规R代码应该自动安装软件包:软件包管理和运行代码是独立的任务,如果R软件包库是在系统范围内配置的,则用户代码甚至没有安装软件包所需的权限。据我所知,Go编程语言过去提倡自动安装软件包,结果是一团糟,因此他们现在建议不要这样做(而是依赖
dep
工具进行软件包管理)。相当公平的无耻插件:“box”软件包也实现了模块系统,使这一点毫不费力:
if(is.null(box::name()))…
。很好!做得很好!它还会自动安装丢失的软件包吗?那将非常有用!不,这是一个需要考虑的活动主题,但我不认为常规R代码应该自动安装软件包:软件包管理和运行代码是分开的任务,如果R软件包库是在系统范围内配置的,用户代码甚至没有安装软件包所需的权限。据我所知,过去提倡自动安装软件包的Go编程语言结果是一团糟,因此他们现在建议不要这样做(而是依赖
dep
工具进行软件包管理)。这很公平