【发布时间】:2017-02-22 09:14:14
【问题描述】:
我目前正在处理一个问题。我正在为一些特定的发行版开发一个包,其中我想创建一个适合混合到某些数据的函数。为此,我想使用例如fitdistr 函数。问题是我不知道混合物将由什么分布、重量和成分数量组成。因此,我需要一个函数来动态创建某些指定混合物的密度函数,以便fitdistr 函数可以使用它。例如,如果用户将调用:
fitmix(data,dist=c(norm,chisq),params=list(c(mean=0,sd=3),df=2),wights=c(0.5,0.5))
要使用 ML 方法,代码需要创建一个密度函数
function(x,mean,sd,df) 0.5*dnorm(x,mean,sd)+0.5*dchisq(x,df)
所以它可以调用optim 或fitdistr。
一个明显的解决方案是使用大量的paste+eval+parse,但我认为这不是最优雅的解决方案。一个不错的解决方案可能隐藏在非标准评估和表达式操作的某个地方,但我在这个问题上没有足够的技能。
附:参数可以用作优化器的起始值。
【问题讨论】:
-
你有什么尝试吗?这基本上读起来就像一个“请为我编码”的问题,这个网站不鼓励这样做。如果您可以提出更具体的问题或至少显示您尝试过的代码,那将改善您的问题。
-
这个例子是实际任务的简化版本,所以我的代码对这个问题没有帮助。我能够使用类似 lapply(seq_along(D),function(i) paste(dist[i],paste("(x,",paste(names(params[[i]])), collapse = ","),")",sep=""),sep = "")) + 将它们粘贴在一起并尝试 as.call 但没有任何好的结果
标签: r function expression eval