将优化函数应用于数据框
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
我有一个一维函数 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