gpt4 book ai didi

r - 将闭包转换为 R 中的字符

转载 作者:行者123 更新时间:2023-12-04 10:30:13 25 4
gpt4 key购买 nike

我有数据和工作总结功能:

[data:]       x = runif(100)

[function 1:] sapply(list("mean", "median", "sd"),
function(f) array(do.call(f, list(x)),
dimnames=list(f)))

mean median sd
0.5198142 0.5566567 0.3048372

以下也运行,但没有给出 dimnames :
[function 2:] sapply(list(mean, median, sd), 
function(f) array(do.call(f, list(x))))

[1] 0.5198142 0.5566567 0.3048372

我尝试了 quote() 的各种组合都没有成功, enquote() , substitute() , deparse()等给我与函数 2 相同的结果(其中要应用的函数没有引用),就像我从函数 1 中得到的一样。我想找到以下形式的东西,如果它存在,它会产生与函数相同的结果1:
[function 3:] sapply(list(mean, median, sd), 
function(f) array(do.call(f, list(x)),
dimnames=list(SOMEFUNCTION(f))))

我对这个问题的理解是我需要使用引用 mean 的函数, mediansd但在 f 之后已部分评估;我在这方面的所有尝试都失败了。

我开始编写类似函数 3 的函数;重写为函数 1 是我获得所需输出的唯一方法,但是我不禁觉得有某种方法可以在没有函数 1 中的引号的情况下实现这一点。

由于这个区域对我来说有点困惑,除了提供代码外,您能否解释一下您的解决方案为何有效。

谢谢。

最佳答案

您只需命名元素:

sapply(list(mean=mean, median=median, sd=sd), 
function(f) array(do.call(f, list(x))))

# mean median sd
# 0.5151791 0.4883450 0.2723679
sapply(list(orUse=mean, YourChoice=median, OfNames=sd), 
function(f) array(do.call(f, list(x))))

# orUse YourChoice OfNames
# 0.5151791 0.4883450 0.2723679

关于r - 将闭包转换为 R 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16380961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com