在Python或R中使用数据时,我们通常会加载几个包。在某些情况下,两个包(例如foo
和bar
)可能每个都包含某个函数(例如do_stuff
)。
在Python中进行管理以防止歧义或意外的方式如下:
from foo import do_stuff
from bar import other_function # (does not load/import do_stuff() from bar)
在R中,我看到的所有代码都只导入带有多个library(package_name)
语句的整个程序包。我认为这将导致很难捕获的错误。例如,请参阅重新排序因数,根据装入的包,给出不同的结果。实际上,即使“没有屏蔽,因为reorder.factor在基数中不存在”,也会发生这种情况。
我希望这个问题的一般答案像from package import function
上面的代码一样,但事实并非如此。实际上,被接受的(且唯一的)答案仅说明了问题存在的原因(而不是低估该贡献)。在答案的注释中提供了一种解决方法,但是该解决方法特定于该特定功能(reorder
)。
有什么通用的方法可以仅从R中的特定程序包中导入特定功能?这样一来,我就可以对代码中所有函数的调用来自何处进行明确和明确的确定,并确保它们按我认为的方式工作?
您可以使用该package::function()
结构明确地告诉R应该将哪个包用于给定的函数。您甚至可以使用它来调用尚未加载的包中的函数library
。
library(dplyr) # Has a function called filter()
library(plyr) # Also has a filter() function
dplyr::filter(foo)
plyr::filter(bar)
如果要确保将代码混乱的可能性降到最低,我强烈建议您使用该conflicted
软件包,该软件包将强制您为所有歧义函数调用明确标识该软件包:https : //www.tidyverse.org/articles/ 2018/06 /冲突/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句