我有数据
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()
功能应该可以做到这一点,但我的问题是我需要传递两个不同维度的数据帧。我怀疑某种形式的清单可能有所帮助,但不知道如何。
答案 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)