生成R中的函数列表

时间:2014-05-28 00:09:17

标签: r function evaluation

我想在R中生成函数列表。基本上,我想生成f <- function(x){a*x}形式的函数列表,其中我指定了a值的向量。这可能吗?

或者是否可以指定a的值然后让R解释已经评估过a的函数?为了澄清,如果我指定a <- 2,我是否可以让R将f视为function(x){2*x}而不是function(x){a*x}

3 个答案:

答案 0 :(得分:4)

是的,你可以这样做。这是一个例子

a<-1:5

fn<-lapply(a, function(i) {
    force(i)
    function(x) {
        x * i
    }
})


fn[[1]](1)
fn[[5]](1)

唯一的&#34;技巧&#34;这是force()函数。因为R使用惰性求值,所以在实际需要之前它不会解码i值。如果你没有将force放在那里,那么当你去使用一个函数时,它将最终解决ii将只是它的最后一个值。 lapply在这种情况下为5

答案 1 :(得分:2)

这样的事情也可能很方便。您可以使用bodyget

更改函数的正文
> f <- function(x) a*x
> f
function(x) a*x

> a <- 2
> body(f)[[2]] <- get('a')
> f
function (x)
2 * x

> f(1:5)
# [1]  2  4  6  8 10

函数的主体是一个列表,它的元素可以像任何其他列表一样被访问。

> body(f)
2 * x
> as.list(body(f))
# [[1]]
# `*`

# [[2]]
# [1] 2

# [[3]]
# x

答案 2 :(得分:0)

这是另一种解决方案,我尝试过,但认为失败了。我们可以使用一个闭包,它是一个返回函数的函数。

cl <- function(a){
    f <- function(x){a*x}
return(f)
}

cl(1)(1)
cl(5)(1)