现在我正在尝试解决有关建立函数来计算R中生成函数的时刻的日志的问题。所需的程序是用户可以随机输入任意随机密度函数f(x)变量。但是,我不知道如何让R识别函数表达式的输入字符串,比如说“x ^ 2-4 * x”,并把它变成一个可行的数学表达式或者说是函数。有人可以帮忙吗?
mgf <- function(expr, t, from=NULL, to=NULL){
moment <- NULL
for (i in 1:length(t)){
moment <- c(moment,integrate(exp(x*t[i])*(expr),lower=from,upper=to))
}
return(moment)
}
这是我目前正在使用的代码。显然,它不会起作用。我想要的是用户可以输入表达式,如x^2-4*x
,这是expr的值,然后将expr转换为integrate()
函数可以评估的函数的一部分。
答案 0 :(得分:1)
您可以尝试:
library(functional)
mgf = function(stringFormula, t, from=NULL, to=NULL)
{
f = function(x, i) exp(x*i)*eval(parse(text=stringFormula))
sapply(t, function(u) integrate(Curry(f, i=u), lower=from, upper=to)[[1]])
}
关键是,您需要在x
参数中将字符串stringFormula
作为变量传递:
mgf("x^2-4*x", 1:5, from=0, to=1)
#[1] -3.281718 -6.791792 -14.652785 -32.698902 -74.976232