说我有一个文件utils.R
,而不是包含一些函数foo, moo
我希望能够获取此文件,然后像典型的R包一样引用函数和源文件,比如说:
customSource(file='utils.R', name='my_utils')
mu_utils::foo()
mu_utils::moo()
如何做到这一点?
答案 0 :(得分:0)
你做不到。引用?source
:
从该文件读取并解析输入,直到文件末尾为止 到达,然后解析的表达式按顺序进行评估 选择的环境
基本上,当您获取文件时,所有代码都会像您在控制台中输入一样运行。在您的情况下,函数foo
和moo
将添加到您当前的环境中,就像您将它们输入控制台一样。
如果要将函数加载到特定环境中,可以使用sys.source
函数指定要解析源代码的环境,但这仍然无法执行您想要的操作。
正如@dww评论的那样,做你想做的事的唯一方法就是把你的文件变成一个包。实际上并不难。如果您正在使用RStudio,只需创建一个新项目并选择“New Package”。它将创建您需要的所有文件的文件夹和骨架。 Hadley Wickham的这本免费书籍旨在制作公开发行的套餐,因此它有很多你不需要的细节,但应该回答你对这个过程的任何其他问题:http://r-pkgs.had.co.nz/
答案 1 :(得分:0)
可以!不完全像一个包裹,而是一个清单!为此,请使用环境:
my_utils <- base::new.env()
source("utils.R", local = my_utils)
my_utils$foo()
my_utils$moo()
请阅读https://adv-r.hadley.nz/environments.html,以更好地了解环境。