在文件中列出R的函数

3

我该如何列出某个R文件中的所有函数,类似于以下操作:

list = list.all.functions(file.name, alphabetical = TRUE, ...)

其中list是一个字符串向量,包含file.name中函数的名称。

如何列出R文件中所有函数及其参数的方法? 的解决方案对我没有输出(因为我不关心参数,所以我提了一个新问题)。

编辑

文件allometry.R从以下开始:

#==========================================================================================#
#==========================================================================================#
#    Standing volume of a tree.                                                            #
#------------------------------------------------------------------------------------------#
dbh2vol <<- function(hgt,dbh,ipft){
   vol  = pft$b1Vol[ipft] * hgt * dbh ^ pft$b2Vol[ipft]
   return(vol)
}#end function dbh2ca
#==========================================================================================#
#==========================================================================================#

我的主要代码看起来像这样

rm(list=ls())

here     = "/directory/of/allometry.R/"
setwd(here)

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')


file_parsed = parse("allometry.R")
functions = Filter(is_function, file_parsed)
function_names = unlist(Map(function_name, functions))

你两个答案都失败了吗?我觉得这很不可能。 - Tim Biegeleisen
我尝试了两种方法,但都没有输出。 - Manfredo
你能否更新你的问题,包括一个你试图列出函数的文件样本? - Tim Biegeleisen
好的,我在我的编辑中放了一个几乎可以重现的例子。在特定情况下,打印最后一个变量function_names会得到NULL作为结果。 - Manfredo
2
只需在我们的 allometry.R 输入文件中将 <<- 更改为 <-(或将 <<- 添加到向量 c('=', ... 中,但您99.9%的情况下不需要这样的全局声明。它们几乎总是一种糟糕的编码风格)。 - Patrick Roocks
好的,明白了。实际上是全局等于号 <<- 而不是 =。 - Manfredo
1个回答

3

可能已经晚了,但迟做总比不做好。

有一个名为NCmisc的包,其中有一个函数可以列出文件中的所有函数,并返回一个列表,其中组件的名称是它们所属的包的名称。如果全局环境中有任何函数,则它们将在.GlobalEnv列表组件下。只需加载文件使用的所有包,然后运行以下命令:

all.functions <- list.functions.in.file(
                       filename = "/path/to/file/my_file.R")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接