将函数列表应用于R中的单个参数

时间:2014-12-13 22:21:02

标签: r

您好我正在尝试将函数列表应用于R中的单个参数。例如,

flist <- list(F,G,H) #F,G,H are function objects

并说我想要一个列表或向量 (F(x),G(x),H(x))其中x是标量数字。 你知道我怎么能实现这个目标吗?

2 个答案:

答案 0 :(得分:5)

实现这一目标的最有效方式是使用单个lapply(而不是3个不同的函数),例如

flist <- list(mean, unique, max) # Example functions list
MyScalar <- 1 # Some scalar
lapply(flist, function(f) f(MyScalar))
# [[1]]
# [1] 1
# 
# [[2]]
# [1] 1
# 
# [[3]]
# [1] 1

但是,如果所有函数都给出了相同的大小/类结果,那么使用vapply

可以进一步提高它
vapply(flist, function(x) x(MyScalar), FUN.VALUE = double(1))
## [1] 1 1 1

答案 1 :(得分:2)

f <- function(x) x^1
g <- function(x) x^2
h <- function(x) x^3
l <- list(f, g, h)

sapply(l, do.call, list(2))
## [1] 2 4 8

do.call允许使用可变长度参数列表进行函数委派。 例如,c(1, 2, 3)可以这样调用:do.call(c, list(1, 2, 3))(s|l)apply只是遍历列表并将指定的函数应用于每个项目。因此,l的第一次迭代将是:do.call(l[[1]], list(2)),相当于l[[1]](2),相当于f(2)