Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我源于一个R文件时,库(<;package>;)到底会发生什么_R_Namespaces_Package - Fatal编程技术网

当我源于一个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可以轻松编写文档。)