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