感谢您的提前帮助,如果这个问题之前已经得到解答,我很抱歉——我已经进行了相当广泛的搜索。我有一个数据集包含一行连接信息,具体来说是:名称、颜色代码、一些函数表达式。例如,一个值可能是:
cost#FF0033@log(x)+6.
我已经编写好了提取信息的所有代码,并且最终获得了一个表达式向量,我想将其转换为实际函数列表。
例如:
相当于
cost#FF0033@log(x)+6.
我已经编写好了提取信息的所有代码,并且最终获得了一个表达式向量,我想将其转换为实际函数列表。
例如:
func.list <- list()
test.func <- c("x","x+1","x+2","x+3","x+4")
其中test.func是表达式向量。我希望的是:
func.list[[3]]
相当于
function(x){x+3}
我知道可以使用以下方法创建一个函数:
somefunc <- function(x){eval(parse(text="x+1"))}
将字符值转换为函数。当我尝试循环进行多个函数时,问题就出现了。以下是我尝试但未成功的示例:
for(i in 1:length(test.func)){
temp <- test.func[i]
f <- assign(function(x){eval(expr=parse(text=temp))})
func.list[[i]] <- f
}
基于另一篇文章(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]))))
}
这会导致以下错误:Error in eval(expr, envir, enclos) : object 'x' not found
最终的目标是将函数列表应用于数据框的第j列,以便脚本的用户可以指定如何规范化列头所给出的连接信息中的每一列。