gpt4 book ai didi

r - 如何防止函数污染全局命名空间?

转载 作者:行者123 更新时间:2023-12-04 01:21:41 24 4
gpt4 key购买 nike

我的 R 项目变得越来越复杂,我开始寻找一些与 Java/C# 中的类或 python 中的模块等效的构造,这样我的全局命名空间就不会被那些从未在外部使用过的函数弄得乱七八糟一个特定的 .r 文件。

所以,我想我的问题是:在多大程度上可以将函数的范围限制在特定的 .r 文件或类似文件中?

我想我可以将整个 .r 文件变成一个巨大的函数,然后将函数放入其中,但这会与回显相混淆:

我的文件.r:

myfile <- function() {
somefunction <- function(a,b,c){}
anotherfunction <- function(a,b,c){}

# do some stuff here...
123
456
# ...
}
myfile()

输出:
> source("myfile.r",echo=T)

> myfile <- function() {
+ somefunction <- function(a,b,c){}
+ anotherfunction <- function(a,b,c){}
+
+ # do some stuff here...
+ # . .... [TRUNCATED]

> myfile()
>

您可以看到没有打印“123”,即使我们在 echo=T 命令中使用了 source

我想知道是否还有其他更标准的构造,因为将所有内容放在一个函数中听起来不像是真正标准的东西?但也许是?此外,如果这意味着 echo=T 有效,那么这对我来说无疑是一个好处。

最佳答案

不要担心“制作包装”的复杂性。别再这样想了。你要做的是:

  • 在您正在处理项目的文件夹中,创建一个名为“R”的文件夹
  • 把你的 R 代码放在那里,每个文件一个函数
  • 在您的项目目录中创建一个说明文件。查看现有示例以了解确切格式,但您只需要几个字段。
  • 获取开发工具。 install.packages("devtools")
  • 使用开发工具。 library(devtools)

  • 现在,将函数写入 R 文件夹中的 R 文件。要将它们加载到 R 中,请不要获取它们。做 load_all() .您的函数将被加载,但不会被加载到全局环境中。

    编辑您的 R 文件之一,然后执行 load_all()再次。这将加载 R 文件夹中的所有修改文件,从而更新您的函数。

    就是这样。编辑, load_all ,冲洗并重复。您创建了一个包,但它非常轻量级,您不必处理 R 包构建工具的束缚和纪律。

    我已经看到、使用甚至编写过尝试实现用于加载对象的轻量级打包机制的代码,但没有一个比 devtools 做得更好。

    万岁哈德利!

    关于r - 如何防止函数污染全局命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13081696/

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