gpt4 book ai didi

r - match.call() 返回一个函数或一个符号,但符号不能被 do.call() 使用

转载 作者:行者123 更新时间:2023-12-04 15:17:01 24 4
gpt4 key购买 nike

我想在 R 中使用修改后的参数进行递归函数调用。

recursive_function_call <- function(call) {

fun_call <- as.list(call)
fun <- fun_call[[1]]
arguments <- fun_call[-1]

## Modify Arguments
arguments$drop_option <- NULL

## Call Function
result <- do.call(what = fun, args = arguments)
return(result)
}
recursive_function_call(match.call())

我想从类似函数的数组中调用这个函数。如果这是从顶级函数调用的变量 fun类型为 symbol ,虽然它进入较低级别的函数调用,但乐趣将是 function .

我的问题是 do.call()当函数是一个符号时失败,而对于参数,它可以是符号。

我的解决方案是将符号转换为字符串。
if (is.symbol(fun_call[[1]])) fun <- as.character(fun_call[[1]]) else fun <- fun_call[[1]]
  • 有没有更好的方法来获取调用对象的功能?
  • 在我将其转换为字符串后,有没有办法检查符号是否可用?或者我可以避免转换吗?
  • 最佳答案

    如您所见,do.call从函数名称(或函数)和参数列表构造并调用调用表达式(并调用它)。但是你已经有了调用表达式,不需要 do.call — 因此您可以使用 eval 直接调用它或 eval.parent :

    recursive_function_call = function(call) {
    call$drop_options = NULL
    eval.parent(call)
    }

    recursive_function_call(match.call())

    也就是说,我不确定你的函数的目的是什么。您在找 Recall ?

    或者,您可以使用 as.call 将列表强制转换为函数调用表达式。而且,再一次, eval然后评估它:
    eval.parent(as.call(fun_cal))

    ——事实上, as.call本质上是 as.list 的倒数在调用表达式上: identical(as.call(as.list(call)), call)TRUE .

    关于r - match.call() 返回一个函数或一个符号,但符号不能被 do.call() 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58878320/

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