【问题标题】:R: optim() when function has inputs in different formatsR:当函数具有不同格式的输入时,优化()
【发布时间】:2018-02-23 08:37:54
【问题描述】:

我有数据

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 的值,它可以在a 的所有值中最小化foo 的输出。 optim() 函数应该能够做到这一点,但我的问题是我需要将两个不同维度的数据帧传递给它。我怀疑某种形式的列表可能会有所帮助,但不知道如何。

【问题讨论】:

    标签: r optimization


    【解决方案1】:

    来自optim 的帮助文档,

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

    par &lt; 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)
    

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多