将函数内容分配给变量以进行文本处理

Ari*_*man 3 r data-mining

我想将函数的内容作为文本分配给变量,以便我可以在其中查找各种模式.(实际上,我想分配每个函数的内容,以查找从其他函数调用每个函数的频率,但是一旦我可以为一个函数执行它,这很容易做到).

乍一看,这似乎很容易.这就是为什么在控制台中键入一个函数名称,这意味着print.function应该告诉我如何做到这一点:

> print.function
function (x, useSource = TRUE, ...) 
.Internal(print.function(x, useSource, ...))
<environment: namespace:base>
Run Code Online (Sandbox Code Playgroud)

失败.那么如果我只是将函数内容分配给变量并将它们强制转换为字符呢?

fxn_names <- apropos(".+")
fxns <- lapply(fxn_names,get)
as.character(fxns[[1]])

Error in as.character(fxns[[1]]) : 
  cannot coerce type 'builtin' to vector of type 'character'
Run Code Online (Sandbox Code Playgroud)

这里有诀窍吗?也许是一个我不了解的内部功能?

koh*_*ske 8

deparse

> deparse(mean)
[1] "function (x, ...) "  "UseMethod(\"mean\")"
> deparse(`+`)
[1] ".Primitive(\"+\")"
Run Code Online (Sandbox Code Playgroud)

至于将所有功能作为文本,一些技巧是必要的:

fxn_names <- apropos(".+")
fxns<-lapply(fxn_names, 
  function(f) eval(parse(text=paste("deparse(`", f, "`)", sep=""))))
Run Code Online (Sandbox Code Playgroud)

更新

这是更简单的解决方案(感谢@ gsk3)

fxn_names <- apropos(".+")
fxns <- lapply(fxn_names, function(x)deparse(get(x)))
Run Code Online (Sandbox Code Playgroud)