我的任务是编写一个更高阶函数,用于将一元函数列表链接在一起。第一个参数是一个数组,它包含要调用的函数的名称。第二个参数是要与函数一起使用的值。这是代码
for (id in 1:5) {
files_full <- Sys.glob("*.csv")
fileQ <- files_full[[id]]
empty_tbl <- rbind(empty_tbl, read.csv(fileQ, header = TRUE))
}
所需的输出是19,但它只执行第一个函数并打印出16个。我想我需要以某种方式组合这些函数,但不能绕过它。我需要使用apply()或call()方法来完成任务吗?我是函数式编程的新手。
答案 0 :(得分:2)
您的问题是return a[i](b)
只调用第一个函数并立即返回其结果。您需要在循环后放置return
:
for (var i = 0; i < a.length; i++) {
b = a[i](b)
}
return b
或者,这是reduce
/ fold
的一个很好的用例(您可能在函数组合之前遇到过):
return function(b) {
return a.reduce(function(b, f) { return f(b) }, b)
};
甚至
return a.reduce(compose, function id(x) { return x; });