在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"
答案 0 :(得分:6)
完成后
funclist <- list(a,b)
评估参数a
和b
,并返回它们指向的函数。没有办法回到原来的名字。 (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"
获取名称