获取列表中的函数名称

Emm*_*Lin 5 r

我希望实现的目标

所以我想在函数列表中获取我的函数名称.

这是一个例子:

foo = list(foo1 = sum, foo2 = mean)
Run Code Online (Sandbox Code Playgroud)

我想从中提取的foo是:

list("sum", "mean")
Run Code Online (Sandbox Code Playgroud)

我希望它是一个功能,意思是:

> foo = list(foo1 = sum, foo2 = mean)
> super_function(foo)
list("sum", "mean")
Run Code Online (Sandbox Code Playgroud)

我检查了什么

应用名称:

> sapply(foo , names)
$`foo1`
NULL

$foo2
NULL
Run Code Online (Sandbox Code Playgroud)

应用deparse(substitute())

> my_f <- function(x)deparse(substitute(x))
> sapply(foo, my_f)
    foo1     foo2 
"X[[i]]" "X[[i]]" 
Run Code Online (Sandbox Code Playgroud)

这两个想法都没有用......

更多背景:

这里有一些更多的细节.一个人不需要他们理解第一个问题,但社区要求提供额外的细节.

我正在使用这些函数作为用户给出的聚合函数.

data(iris)
agg_function<-function(data, fun_to_apply){
  res <- list()
  for (col_to_transform in names(fun_to_apply)){
    res[col_to_transform] <- (fun_to_apply[[col_to_transform]])(data[[col_to_transform]])
  }
  res
}


agg_function(iris, fun_to_apply = list("Sepal.Length" = mean, "Petal.Length" = sum))
Run Code Online (Sandbox Code Playgroud)

结果是:

$`Sepal.Length`
[1] 5.843333

$Petal.Length
[1] 563.7
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我正在两列虹膜上进行聚合.但我希望在我的结果的每个字段的名称中都有已执行函数的名称. 注意:这是对我正在做的过度简化;

结论:

你有什么想法?

MrF*_*ick 3

如果您只是从列表开始foo = list(foo1 = sum, foo2 = mean),那么这是不可能的。调用将评估参数,返回变量和指向的list()值,但它不会记住这些变量名称。R 中的函数没有名称。但函数可以分配给变量。然而,在 R 中,函数也可以没有名称。summean

您基本上刚刚创建了一个命名的函数列表。这也可能看起来像这样

foo = list(foo1 = function(x) sum(x+1), 
    foo2 = function(x) mean(x+1))
Run Code Online (Sandbox Code Playgroud)

这里我们也有函数,但是除了您在列表中为它们指定的名称之外,这些函数没有“名称”。

完成这项工作的唯一机会是使用除了list()最初创建 foo 时以外的其他东西。或者让它们实际上list()在函数调用中显式调用(这不太实用)。