我有一个一维函数f(x),对于不同的参数值,我希望在(0,1 ...,10)的某个值范围内最大化,这些参数值在数据框的列中。数据框的每一行代表一组参数,我想为其最大化函数。
我的数据的程式化示例如下:
| 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))
到目前为止,我已经创建了以下函数,它保存了最大化值和目标函数。我的问题是: 我应该如何更改代码,以便它只保存函数最大化的值并将结果附加到现有数据框?
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)
}
答案 0 :(得分:0)
如果您的数据只有数字值,则可以将其用作矩阵,然后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