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

时间:2011-08-13 06:08:12

标签: r data-mining

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

乍一看,这似乎很容易。这就是在控制台中输入函数名称的原因,这意味着print.function应该告诉我如何操作:

> print.function
function (x, useSource = TRUE, ...) 
.Internal(print.function(x, useSource, ...))
<environment: namespace:base>

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

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'

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

1 个答案:

答案 0 :(得分:8)

deparse

> deparse(mean)
[1] "function (x, ...) "  "UseMethod(\"mean\")"
> deparse(`+`)
[1] ".Primitive(\"+\")"

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

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

<强>已更新

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

fxn_names <- apropos(".+")
fxns <- lapply(fxn_names, function(x)deparse(get(x)))