将优化函数应用于数据框

Apply optimization function to data frame

我有一个一维函数 f(x),我想针对不同的参数值在 (0,1 ..., 10) 的一定范围内最大化 x 值,这些参数值位于 a 的列中数据框。数据框的每一行代表我想要最大化函数的一组参数。

我的数据的程式化示例如下:

| a  | b   | c | n  |
|----|-----|---|----|
| 2  | 1.5 | 1 | 2  |
| -1 | 2   | 1 | 3  |
| 1  | 0.5 | 1 | 20 |

以及我要应用的功能

minmax <- function(x, a, n, b, c) ((20+a*x)+(15+b*x)+n*(30-c*x))

到目前为止,我已经创建了以下函数,它保存了最大值和 objective 函数。我的问题是: 我应该如何更改代码,使其只保存函数最大化的值并将结果附加到现有数据框?

for (i in 1:46){ 
    min.max.value[[i]]   <- optimize(minmax, c(0, 10),  a = data.2$a[i], 
    n=data.2$n[i], b=data.2$b[i], c=data.2$c[i], maximum=T)
}

如果您的数据只有数值,您可以将其用作矩阵,然后 apply 行上的 optmize 函数,仅保存 x 的优化值。

数据:

mat <- matrix(c(2, -2, 1, 1.5, 2, 0.5, 1, 1, 1, 2, 3, 20), ncol=4)
colnames(mat) <- c("a", "b", "c", "n")

函数:

minmax <- function(x, a, n, b, c) ((20+a*x)+(15+b*x)+n*(30-c*x))
opt <- apply(mat, 1, function(i) {
  optimize(minmax, c(0, 10),  a = i[["a"]], n=i[["n"]], b=i[["b"]], c=i[["c"]], maximum=T)$maximum 
})

绑定结果:

mat2 <- cbind(mat, opt)
mat2
      a   b c  n          opt
[1,]  2 1.5 1  2 9.999944e+00
[2,] -2 2.0 1  3 5.575865e-05
[3,]  1 0.5 1 20 5.575865e-05