从R脚本中提取函数的更好方法是什么?

And*_*our 3 bash split r function

假设我有一个文件"myfuncs.R",其中包含一些函数:

A <- function(x) x
B <- function(y) y
C <- function(z) z
Run Code Online (Sandbox Code Playgroud)

我想将"myfuncs.R"中包含的所有函数放入他们自己的文件中,并适当命名.我有一个简单的Bash-shell脚本来提取函数并将它们放在单独的文件中:

split -p "function\(" myfuncs.R tmpfunc
grep "function(" tmpfunc* | awk '{
  # strip first-instances of function assignment
  sub("<-", " ")
  sub("=", " ")
  sub(":", " ")  # and colon introduced by grep
  mv=$1
  mvto=sprintf("func_%s.R",$2)
  print "mv", mv, mvto
}' | sh
Run Code Online (Sandbox Code Playgroud)

离开我:

func_A.R
func_B.R
func_C.R
Run Code Online (Sandbox Code Playgroud)

但是,这个脚本有明显的局限性.例如,当函数'A'具有嵌套函数时,它会出错:

A <- function(x){
    Aa <- function(x){x}
    return(Aa)
}
Run Code Online (Sandbox Code Playgroud)

如果整个函数在一行上,则完全失败.

有没有人知道更强大,更少出错的方法呢?

GSe*_*See 7

获取您的功能,然后输入 package.skeleton()

将为每个功能分别创建文件.

  • 请注意,`dump`是`package.skeleton()`中用来编写'function'对象的文本表示的函数.因此,如果您只想保存函数而不处理包框架,则可以使用它. (2认同)