gpt4 book ai didi

r - 如何检索原始函数的形式?

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

目前,至少,这对我来说是一个学习练习,因此实际功能或其复杂性不是问题。假设我编写了一个函数,它的参数列表包括一些输入变量和一个函数名,作为字符串传递。然后这个函数在内部计算一些变量并“决定”如何将它们提供给我传入的函数名称。

对于非原始函数,我可以这样做(对于这个例子,假设我的 funcname 函数中没有任何参数,除了最多 (x,y,z) 。如果他们这样做了,我必须写一些代码来搜索匹配的 names(formals(get(funcname)))以免删除其他参数):

foo <- function (a,b,funcname) {
x <- 2*a
y <- a+3*b
z <- -b
formals(get(funcname)) <- list(x=x, y=y, z=z)
bar <- get(funcname)()
return(bar)
}

好消息是,即使函数 funcname即使不使用 x 也不会出错, yz (只要没有其他没有默认值的参数)。
“原始”函数的问题是我不知道找到或修改它们的形式的任何方法。除了编写包装器,例如 foosin <-function(x) sin(x) , 有没有办法设置我的 foo函数使用原始和非原始函数名称作为输入参数?

最佳答案

formals(args(FUN))可用于获取原始函数的形式。

您可以添加 if对现有函数的声明。

> formals(sum)
# NULL
> foo2 <- function(x) {
if(is.primitive(x)) formals(args(x)) else formals(x)
## formals(if(is.primitive(x)) args(x) else x) is another option
}
> foo2(sum)
# $...
#
#
# $na.rm
# [1] FALSE
#
> foo2(with)
# $data
#
#
# $expr
#
#
# $...

关于r - 如何检索原始函数的形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25978301/

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