day*_*yne 6 r user-defined-functions
在此先感谢,如果此问题已经得到回答,我很抱歉 - 我看起来非常广泛.我有一个数据集,其中包含一行连接信息,特别是:名称,颜色代码,一些函数表达式.例如,一个值可能是:
成本#FF0033 @日志(X)+6.
我有所有提取信息的代码,最后我得到了一个表达式向量,我想将其转换为实际函数列表.
例如:
func.list <- list()
test.func <- c("x","x+1","x+2","x+3","x+4")
Run Code Online (Sandbox Code Playgroud)
其中test.func是表达式的向量.我想要的是:
func.list[[3]]
Run Code Online (Sandbox Code Playgroud)
相当于
function(x){x+3}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用以下方法创建一个函数:
somefunc <- function(x){eval(parse(text="x+1"))}
Run Code Online (Sandbox Code Playgroud)
将字符值转换为函数.当我尝试循环以创建多个函数时,问题就来了.我试过的一些例子不起作用:
for(i in 1:length(test.func)){
temp <- test.func[i]
f <- assign(function(x){eval(expr=parse(text=temp))})
func.list[[i]] <- f
}
Run Code Online (Sandbox Code Playgroud)
基于另一篇文章(http://stats.stackexchange.com/questions/3836/how-to-create-a-vector-of-functions)我也试过这个:
makefunc <- function(y){y;function(x){y}}
for(i in 1:length(test.func)){
func.list[[i]] <- assign(x=paste("f",i,sep=""),value=makefunc(eval(parse(text=test.func[i]))))
}
Run Code Online (Sandbox Code Playgroud)
这给出了以下错误:eval中的错误(expr,envir,enclos):找不到对象'x'
最终目标是获取函数列表并将第j个函数应用于data.frame的第j列,以便脚本用户可以指定如何规范化列标题给出的连接信息中的每一列.
也许使用单个通用函数初始化您的列表,然后使用以下方法更新它们:
foo <- function(x){x+3}
> body(foo) <- quote(x+4)
> foo
function (x)
x + 4
Run Code Online (Sandbox Code Playgroud)
更具体地说,从一个角色开始,您可能会这样做:
body(foo) <- parse(text = "x+5")
Run Code Online (Sandbox Code Playgroud)