gpt4 book ai didi

r - 如何列出 R 文件中的所有函数签名?

转载 作者:行者123 更新时间:2023-12-04 22:31:34 24 4
gpt4 key购买 nike

是否有一个 R 函数列出了 R 脚本文件中的所有函数及其参数?

即形式的输出:

func1(var1, var2)
func2(var4, var10)
.
.
.
func10(varA, varB)

最佳答案

使用 [ sys. ] source具有在文件内执行源的非常不受欢迎的副作用。在最坏的情况下,这会带来安全问题,但即使是“良性”代码在执行时也可能会产生意想不到的副作用。充其量只是需要不必要的时间(可能很多)。

不过,实际上没有必要执行代码:解析它,然后进行一些语法分析就足够了。

实际代码很简单:

file_parsed = parse(filename)
functions = Filter(is_function, file_parsed)
function_names = unlist(Map(function_name, functions))

好了, function_names包含一个函数名称向量。将此扩展为还列出函数参数作为练习留给读者。提示:有两种方法。一是到 eval函数定义(现在我们知道它是一个函数定义,这是安全的);另一个是到 cheat并获取 function 的参数列表称呼。

上面用到的函数的实现也不是特别难。 R 核心包中甚至可能已经有一些东西( utils 有很多东西)但是由于我对此不是很熟悉,所以我只是自己编写了它们:
is_function = function (expr) {
if (! is_assign(expr))
return(FALSE)
value = expr[[3]]
is.call(value) && as.character(value[[1]]) == 'function'
}

function_name = function (expr)
as.character(expr[[2]])

is_assign = function (expr)
is.call(expr) && as.character(expr[[1]]) %in% c('=', '<-', 'assign')

这可以正确识别表单的函数声明
  • f = function (…) …
  • f <- function (…) …
  • assign('f', function (…) …)

  • 它不适用于更复杂的代码,因为赋值可以是任意复杂的,并且通常只能通过实际执行代码才能解决。然而,上述三种形式在实践中可能占所有命名函数定义的 ≫ 99%。

    关于r - 如何列出 R 文件中的所有函数签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20259681/

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