我想将函数的内容作为文本分配给变量,以便我可以在其中查找各种模式。 (实际上,我想分配每个函数的内容来查找从其他函数调用每个函数的频率,但是一旦我可以为一个函数执行它就很容易做到。)
乍一看,这似乎很容易。这就是在控制台中输入函数名称的原因,这意味着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'
这里有诀窍吗?也许是一个我不了解的内部功能?
答案 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)))