如何在R中添加函数

如何在R中添加函数,r,functional-programming,add,R,Functional Programming,Add,我试图对列表中的函数求和,以创建一个新函数。这对于少量函数来说很容易。以下是一个例子: f <- function(x){x} g <- function(x){x+1} 但是如果我有100个我想求和的函数,这个方法会变得很笨拙。有没有一种方法可以从列表中自动创建像上面的fg这样的函数?您可以使用sapply在函数上循环,然后应用 f <- function(x){x} g <- function(x){x+1} h <- function(x){x*2} fu

我试图对列表中的函数求和,以创建一个新函数。这对于少量函数来说很容易。以下是一个例子:

f <- function(x){x}
g <- function(x){x+1}

但是如果我有100个我想求和的函数,这个方法会变得很笨拙。有没有一种方法可以从列表中自动创建像上面的
fg
这样的函数?

您可以使用
sapply
在函数上循环,然后应用

f <- function(x){x}
g <- function(x){x+1}
h <- function(x){x*2}

funs<-list(f,g,h)

x <- 2
rowSums(matrix(sapply(funs, function(f, z) f(z), z=x), nrow=length(x)))
# [1] 9
您可以通过创建一个helper函数使其更干净

getfunsum <- function(funs) {
    force(funs)
    function(x) {
        rowSums(matrix(sapply(funs, function(f, z) f(z), z=x), nrow=length(x)))
    }
}
fgh <- getfunsum(funs)
fgh(1:3)
# [1]  5  9 13
getfunsum您可以尝试:

 fun1 <- function(i,a) {
                eval(substitute(function(x, a) {x+i*a}, list(i=i)))}

n <- 0:3
lst <- lapply(n, fun1)
rowSums(sapply(lst, function(f) f(12:14, 3)))
#[1] 66 70 74

fun1我更喜欢
Reduce

f <- function(x){x}
g <- function(x){x+1}
h <- function(x){x*2}

funs<-list(f,g,h)

x <- 1:3

Reduce("+", lapply(funs, function(f, y) f(y), y=x))
#[1]  5  9 13

f MrFlick的答案是好的,但你真的应该问问自己,为什么/怎么会在一开始就有一堆独立的小函数溢出(对不起:-)。我无法想象100个无关函数的总和有多大意义。也许你可以编写一个递归函数,把所有的函数都放在一起?@Carl你的直觉是正确的——它们不是不相关的函数。我不确定我是否理解你关于递归的建议。而不是为x+0*a、x+1*a等定义单独的函数,。。。总结一下,你是在建议我把函数x+0*a+x+1*a+。。。使用某种递归,马上?如果是这样,你知道怎么做吗?你只知道向量值的系数?看起来你可以用简单的矩阵代数来做。@MrFlick不,我实际上在错误函数中有复杂的表达式。。。
 fun1 <- function(i,a) {
                eval(substitute(function(x, a) {x+i*a}, list(i=i)))}

n <- 0:3
lst <- lapply(n, fun1)
rowSums(sapply(lst, function(f) f(12:14, 3)))
#[1] 66 70 74
f <- function(x){x}
g <- function(x){x+1}
h <- function(x){x*2}

funs<-list(f,g,h)

x <- 1:3

Reduce("+", lapply(funs, function(f, y) f(y), y=x))
#[1]  5  9 13