gpt4 book ai didi

R:解开范围

转载 作者:行者123 更新时间:2023-12-04 09:21:37 25 4
gpt4 key购买 nike

我的问题是关于在 R 中编写模块时避免命名空间污染。

现在,在我的 R 项目中,我有 functions1.RdoFoo()doBar() , functions2.R与其他功能,和main.R里面有主程序,它首先执行source('functions1.R'); source('functions2.R') ,然后调用其他函数。

我一直从 Mac OS X 中的 R GUI 启动程序,使用 source('main.R') .第一次这样没问题,但在那之后,通过程序第一次定义的变量被第二次定义functions*.R是有源的,因此这些函数定义了一大堆额外的变量。

我不想要那个!当我的函数使用不应该使用的变量时,我想要一个“ undefined variable ”错误!两次这给了我很晚的调试!

那么其他人是如何处理这类问题的呢?有没有类似 source() 的东西,但这会产生一个独立的命名空间,它不会落入主命名空间?制作包裹似乎是一种解决方案,但与例如Python,其中源文件自动成为单独的命名空间。

有小费吗?谢谢!

最佳答案

我将探索两种可能的解决方案。

一)以更实用的方式思考更多 .不要在函数之外创建任何变量。因此,例如,main.R 应该包含一个函数 main(),它从其他文件中获取,并完成工作。当 main 返回时,不会留下任何困惑。

b) 手动清理 :

#main.R
prior_variables <- ls()
source('functions1.R')
source('functions2.R')

#stuff happens

rm(list = setdiff(ls(),prior_variables))`

关于R:解开范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2634512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com