R 包检查尚未 运行 的函数参数的最佳实践是什么?
What is the R package's best practice to check arguments of functions that have not run yet?
问题定义
在一个包中,用户可以选择不同的选项并根据这些选项传递额外的参数。由于这些函数在计算上具有挑战性,我想在进行任何大规模 运行 之前检查用户是否传递了所需的参数。例如,在下面的代码中:
FunOne <- function(x, y, z,...){
FunTwo(x,y,z, ...) # computationally challenging
FunThree(x,y,z, ...)
}
FunThree
的输入取决于 z
参数。如果 z="option 1"
,应传递参数 arg1 = 100
。如果z = "option 2"
,arg2 = "value"
,应该通过。
可能的解决方案
我知道每个选项所需的参数。我想将它们作为全局变量加载,然后仔细检查它们是否通过(例如,pkg.env <- new.env(parent = emptyenv()
)。我可以在一个单独的函数中执行此操作,运行 在分析开始时使用该函数。
我的问题
- 仔细检查 R 包中的参数是否是一种好习惯?
- 我怎样才能 运行 在加载包时在后台运行一个函数。请给我一个包端解决方案,而不是用户端解决方案(例如,~/.Rprofile)。我希望在没有用户干预的情况下发生这种情况。
我认为您的建议可行。我对全局变量的value/purpose不是很了解,一般尽量避免这样的事情。但严格来说它会起作用。似乎缺少两件事:
list(...)
会将 ...
值放入列表中,以便您检查它们。请参阅 ...
.
的帮助
.onAttach
将在包加载时 运行。这是一个例子:
.onAttach <- function(...) {
# Do something when the package loads
}
另请注意,您甚至不需要 .onAttach 来填充环境变量。您可以在代码文件的顶部执行此操作。
问题定义
在一个包中,用户可以选择不同的选项并根据这些选项传递额外的参数。由于这些函数在计算上具有挑战性,我想在进行任何大规模 运行 之前检查用户是否传递了所需的参数。例如,在下面的代码中:
FunOne <- function(x, y, z,...){
FunTwo(x,y,z, ...) # computationally challenging
FunThree(x,y,z, ...)
}
FunThree
的输入取决于 z
参数。如果 z="option 1"
,应传递参数 arg1 = 100
。如果z = "option 2"
,arg2 = "value"
,应该通过。
可能的解决方案
我知道每个选项所需的参数。我想将它们作为全局变量加载,然后仔细检查它们是否通过(例如,pkg.env <- new.env(parent = emptyenv()
)。我可以在一个单独的函数中执行此操作,运行 在分析开始时使用该函数。
我的问题
- 仔细检查 R 包中的参数是否是一种好习惯?
- 我怎样才能 运行 在加载包时在后台运行一个函数。请给我一个包端解决方案,而不是用户端解决方案(例如,~/.Rprofile)。我希望在没有用户干预的情况下发生这种情况。
我认为您的建议可行。我对全局变量的value/purpose不是很了解,一般尽量避免这样的事情。但严格来说它会起作用。似乎缺少两件事:
的帮助list(...)
会将...
值放入列表中,以便您检查它们。请参阅...
..onAttach
将在包加载时 运行。这是一个例子:
.onAttach <- function(...) {
# Do something when the package loads
}
另请注意,您甚至不需要 .onAttach 来填充环境变量。您可以在代码文件的顶部执行此操作。