当我源于一个R文件时,库(<;package>;)到底会发生什么
如果我有一个函数当我源于一个R文件时,库(<;package>;)到底会发生什么,r,namespaces,package,R,Namespaces,Package,如果我有一个函数fun(),它需要另一个函数,比如说,select()(在本例中是dplyr)保存在一个R文件helpfile.R中,并且我想在另一个R文件中使用这个函数fun(),我可以简单地使用source() 现在我注意到,当我在helpfile.r中使用library(dplyr)并在主文件中获取该文件时,会加载包,但是,所有与其他包中的其他函数冲突的函数都会被删除。在我的例子中:我已经加载了包MASS,它还有一个select()函数,在我以这种方式加载dplyr后,该函数仍然处于“活动
fun()
,它需要另一个函数,比如说,select()
(在本例中是dplyr
)保存在一个R文件helpfile.R中,并且我想在另一个R文件中使用这个函数fun()
,我可以简单地使用source()
现在我注意到,当我在helpfile.r中使用library(dplyr)
并在主文件中获取该文件时,会加载包,但是,所有与其他包中的其他函数冲突的函数都会被删除。在我的例子中:我已经加载了包MASS
,它还有一个select()
函数,在我以这种方式加载dplyr
后,该函数仍然处于“活动”状态
问题:当我通过
source()
加载一个包时,为什么链中稍后加载的包不覆盖先前包中的函数?包按照加载顺序相互屏蔽source()
类似于使用CTRL+SHIFT+S
或CTRL+A
后跟CTRL+ENTER
执行整个文件
我建议您不要加载整个包,而是写出完整的名称空间,从而使helpfile.r更加独立。例如
dyplr::select()
实际上,最好是构建一个包。包基础设施允许更好地控制从包名称空间导入的内容。完全同意Roland。然而,为了最佳性能的圣人而越来越深入地研究R,会让你越来越成为一名软件工程师,而不仅仅是一名数据科学家。我是一名地理学家,有时只需要一个特定项目的helperfile.r(这也是一个git存储库)。在这种情况下,我跳过启动另一个(git)项目。。。对于这种情况,实际上一个source()
函数将一个文件构建为迷你包是很酷的:-)好了,除了helperfile.r之外,您不需要更多的描述和名称空间文件就可以拥有一个功能包。(当然,您应该始终记录代码,使用knitr可以轻松编写文档。)