循环遍历功能以构建列表

时间:2014-12-15 08:41:05

标签: r plyr

我有一个功能列表:

func1 <- function(u)
{
    list(val=u, ref="XX1")
}

func2 <- function(u)
{
    list(val=u*u, ref="XX55")
}

func3 <- function(u)
{
    list(val=u-1, ref="XX3")
}

我想用u=2得到这样的结果:

list(XX55=4, XX3=1, XX1=2)

目前我这样做:

funcs = c(func1, func2, func3)

temp = llply(funcs, function(f) f(2))
res  = llply(temp, function(u) u$val)
names(res) = llply(temp, function(u) u$ref)
res

但也许有更优雅/简洁的方法可以继续?

1 个答案:

答案 0 :(得分:4)

您可以使用sapply

sapply(funcs, function(f) {tmp <- f(2); setNames(list(tmp$val), tmp$ref)})
# $XX1
# [1] 1
#
# $XX55
# [1] 341
#
# $XX3
# [1] 11