我希望实现的目标
所以我想在函数列表中获取我的函数名称.
这是一个例子:
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)
在这个例子中,我正在两列虹膜上进行聚合.但我希望在我的结果的每个字段的名称中都有已执行函数的名称. 注意:这是对我正在做的过度简化;
结论:
你有什么想法?
如果您只是从列表开始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()在函数调用中显式调用(这不太实用)。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |