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

标签 r

是否有一个 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/

    相关文章:

    r - 从 Excel 数据表中提取公式(假设分析)

    python - 网状未设置 python 路径

    r - 如何根据另一列的另一个值在一列中收集数据

    r - 使用 lubridate 根据日期创建因子

    r - 根据条件填充多列的行

    r - 非等连接返回不存在的列名

    r - 如何计算R(动物对象)中的自相关

    r - roxygen2 包是否支持表格?

    r - R 中用另一个矩阵求子集

    r - 提取 bool 搜索字符串中的第一个值