循环遍历函数列表,并将函数名称返回为字符

时间:2015-06-09 19:37:34

标签: r

在R中,我有一个功能列表(模拟策略)。例如:

a <- function(x){
        return(x)
      }

b <- function(y){
        return(y)
      }
funclist <- list(a,b)

我想编写一些返回每个函数名称的代码。通常,对于我将使用的函数:

as.character(substitute(a))

但是这对列表不起作用,因为它只返回列表名称(如预期的那样)。然后我尝试了lapply:

> lapply(X = funclist,FUN = substitute)
Error in lapply(X = funclist, FUN = substitute) : 
  '...' used in an incorrect context

但是得到上述错误。

理想情况下,我会得到(lapply解决方案):

[[1]]
[1] "a"

[[2]]
[1] "b"

甚至(sapply解决方案):

[1] "a" "b"

1 个答案:

答案 0 :(得分:6)

完成后

funclist <- list(a,b)

评估参数ab,并返回它们指向的函数。没有办法回到原来的名字。 (substitute()&#34;技巧&#34;适用于作为promises传递给函数的参数。如果没有额外的转义,它将无法在被调用的函数上运行。)

如果您想保留姓名,最好使用命名列表。你可以做到

funclist <- list(a=a,a=b)

funclist <- setNames(list(a,b), c("a","b"))

甚至在这里使用mget()

funclist <- mget(c("a","b"))

所有这些方法都会返回一个命名列表,您可以使用

names(funclist)
# [1] "a" "b"

获取名称