在大型项目中,根据语言,对象,模块,类,名称空间等来组织代码。其背后的原理是,将仅在这些单元中可见的变量(和方法)与全局可访问的变量分开。
Rnw和Rmd文档中的代码需要分组为以 chunks 表示的块。这种逻辑鼓励您根据单独的独立单元来思考您的项目。但是,尽管我们可能将块视为独立块,但所有块变量和函数都位于同一全局环境中。结果,块中设置的变量可以被后续变量覆盖。这很容易出错,因为块可能会意外破坏,重置或更改旨在由多个块共享的变量。
没有设置“私有”和“公共”块变量的方法。所以我正在使用这种策略。
我为打算在块之间共享的变量创建了一个全局G
环境:
G <- new.env()
当一个块修改了要重用的变量x1, x2, ...
时,我在块的末尾设置了它们:
G$x1 <- x1
G$x1 <- x2
在需要这些变量的块的开头,我得到了:
x1 <- G$x1
x2 <- G$x2
方法(函数)也是如此:f1, f2, ...
。
对于大型文档,为避免混乱,我可以使用:
local({
x1 <- G$x1
x2 <- G$x2
...
## If modified x values need to be persistent:
G$x1 <- x1
G$x2 <- x2
})
这些看起来像黑客一样,我想知道您是否有(更)可靠的解决方案。