您好我正在尝试将函数列表应用于R中的单个参数。例如,
flist <- list(F,G,H) #F,G,H are function objects
并说我想要一个列表或向量
(F(x),G(x),H(x))
其中x是标量数字。
你知道我怎么能实现这个目标吗?
答案 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)
。