小编nde*_*vln的帖子

match.call()返回函数或符号,但do.call()不能使用符号

我想用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())
Run Code Online (Sandbox Code Playgroud)

我想从类似函数的数组中调用此函数。如果从顶层函数调用此变量,则该变量fun将为类型symbol,而在底层函数调用该变量,则fun为a function

我的问题是,do.call()当函数是符号时失败,而对于参数来说可以是符号就失败了。

我的解决方案是将符号转换为字符串。

if (is.symbol(fun_call[[1]])) fun <- as.character(fun_call[[1]]) else fun <- fun_call[[1]]
Run Code Online (Sandbox Code Playgroud)
  1. 有没有更好的方法来获取调用对象的功能?
  2. 将符号转换为字符串后,有没有办法检查符号是否可用?还是可以避免转换?

r

5
推荐指数
1
解决办法
38
查看次数

标签 统计

r ×1