R 引用列表中的函数
我有一个函数列表,我希望我能够调用它们,而不是将它们作为独立对象。例如:R 引用列表中的函数,r,R,我有一个函数列表,我希望我能够调用它们,而不是将它们作为独立对象。例如: funcs <- list(foo = function(a, b) a + b, ## in a list, how can I call `foo` from `bar`? bar = function(m) foo(m, m/2)) 我想添加一个名为bounds的列表元素,它将对可能的值进行编码,并使grid引用它们。我可以将边界函数数据传递到网格中,但
funcs <- list(foo = function(a, b) a + b,
## in a list, how can I call `foo` from `bar`?
bar = function(m) foo(m, m/2))
我想添加一个名为
bounds
的列表元素,它将对可能的值进行编码,并使grid
引用它们。我可以将边界
函数数据传递到网格
中,但这会添加新参数并破坏许多向后兼容性。我认为任何其他解决方案都不可能从grid
引用bounds
,而无需对代码进行重大更改 使用环境而不是列表:
env <- new.env()
env$foo <- function(a, b) a + b
env$bar <- function(m) foo(m, m/2)
environment(env$foo) <- environment(env$bar) <- env
env$bar(3)
# 4.5
envfoo
不在bar
的搜索路径上。但是,funcs
是:
funcs <- list(foo = function(a, b) a + b,
bar = function(m) funcs$foo(m, m/2))
funcs$bar(3)
#[1] 4.5
funcs函数已经存在于一个包中,我正试图避免重写所有内容……你是否因为我没有使用你没有在问题中提供的信息而对我投了反对票?如果这是粗鲁的话,很抱歉,但问题是关于如何在该数据结构中解决问题(而不是提供更好的结构).你想解决的实际问题是什么?这个问题读起来像是一个问题。R中的列表不创建自己的环境,R中的函数在创建它们的环境中执行。使用这样的列表是没有意义的。您可能应该使用具有适当功能的适当外壳。您的示例不够完整或清晰,无法测试可能的解决方案。如果你做了一个适当的极小值,它将更容易帮助和测试可能的解决方案。为什么它必须是一个列表?
funcs <- list(foo = function(a, b) a + b,
bar = function(m) funcs$foo(m, m/2))
funcs$bar(3)
#[1] 4.5
constructFuncs <- function() {
foo <- function(a, b) a + b
bar <- function(m) foo(m, m/2)
list(foo = foo, bar = bar)
}
funcs <- constructFuncs()
funcs$bar(3)
#[1] 4.5