当函数具有不同格式的输入时,R:optim()

时间:2018-02-22 19:02:43

标签: r optimization

我有数据

dat1 <- data.frame(a=1:3, b=rnorm(3))
dat2 <- data.frame(a=c(rep(1,3),rep(2,5),rep(3,4)), c=runif(12,1,50))

以及将两个数据帧作为输入的函数

foo <- function(dat1,dat2,par){
               if(par< 25){return(dat1$b*par)}
               if(par>=25){return(sum(dat2$c>par))}
       }

如果它嵌入在a的不同值的循环中,则可能有效。

但是,我希望找到par的值,以最小化foo的所有值a的输出。 optim()功能应该可以做到这一点,但我的问题是我需要传递两个不同维度的数据帧。我怀疑某种形式的清单可能有所帮助,但不知道如何。

1 个答案:

答案 0 :(得分:0)

来自optim的帮助文档,

  

fn - 要最小化(或最大化)的函数,第一个参数是要进行最小化的参数向量。它应该返回一个标量结果。

par < 25时,您的函数未返回标量。由于您在优化过程中没有更改data.frames,因此您不必再次传入它们。以下是您案例中optim的示例用法:

foo <- function(par) {
    if(par < 25) {
        return(sum(dat1$b*par))
    } else {
        return(sum(dat2$c>par))
    }
} 

optim(0, foo, method="Brent", lower=-1e6, upper=1e6)