gpt4 book ai didi

r - 在另一个函数中定义函数的优雅方式

转载 作者:行者123 更新时间:2023-12-04 10:29:58 27 4
gpt4 key购买 nike

我想构建

f <- function(...) {
g <- function(x) x ^ 2
list(...)
}

这样我就可以使用 f(g(4)) 调用并有 list(...)结果 list(16) .

一般我会在 f里面定义几个临时函数用户可以在调用 f(...) 时调用.

我已经尝试过 assignnewenvironment但只是变得更加困惑。感谢提供优雅解决方案的帮助。

想要这个的原因是我想要 Hmisc 中的一个函数包裹, drawPlot能够让用户指定通用命名函数作为构建一系列图形元素的输入,我不想保留这些通用类型名称。例如。:
d <- drawPlot(Curve(), Points())   # interactively make a curve and
# a set of points

最佳答案

我猜你实际上需要比这更复杂的东西,但以下内容满足了您在提供的示例中的要求:

f <- function(...) {
g <- function(x) x ^ 2
list(eval(substitute(...)))
}

f(g(4))
# [[1]]
# [1] 16

或者,如果用户可以提供一个或多个函数调用,如下所示:
f <- function(...) {
g <- function(x) x ^ 2
h <- function(x) 100*x
cc <- as.list(substitute(list(...))[-1])
res <- list()
for(i in seq_along(cc)) {
res[[i]] <- eval(cc[[i]])
}
res
}
f(g(4), h(5))
# [[1]]
# [1] 16
#
# [[2]]
# [1] 500

关于r - 在另一个函数中定义函数的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33737102/

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