我想在r中的isres函数中传递约束和目标函数的参数值。 由于我可能需要使用非线性函数,我使用的是isres函数。 我的代码如下。
############## DATA PREPARETION ##########
per1 <- c(50,24,100,12,33,80,120,75,54,32)
per2 <- c(100,241,141,124,130,102,451,141,471,121)
############## CONSTRAIN FUNCTION DEFINATION ##########
constfunction <- function (per1,per2,x) {
total <- 0
for (i in 1:length(per2)) {
total <- per2[i]*x[i] + total
}
total <- total - 1000
return (total)
}
############## OBJECTIVE FUNCTION DEFINATION ##########
objfunction <- function(per1, per2,x) {
solution <- 0
for (i in 1:length(per1)) {
solution <- per1[i]*x[i] + solution
}
return(solution)
}
############## OPTIMIZATION ##########
n <- length(per1)
res0 <- isres ( x0=c(rep(0,n)),
fn = objfunction,
lower = c(rep(0,n)),
upper = c(rep(1,n)),
hin = NULL,
heq = constfunction,
maxeval = 100000,
xtol_rel = 1e-06,
nl.info = TRUE,
)
这会产生如下错误 参数“x”缺失,没有默认值。
由于x是可变的,我怎样才能在代码中提供x? 另外如何提供per1和per2?即如何在R?
中为isres中的目标函数和约束函数提供参数答案 0 :(得分:0)
你没有在函数objfunction和constfunction中给出isres中的x参数。
假设你有一个需要3个参数a,b,c的函数
f1 <- function(a, b, c){
a + b + c
}
如果在另一个函数中调用f1,则需要在函数内提供3个参数。
在我的例子中:
#
# Let's imagine from some calculation a get this 2 values
p.2 <- 9
p.3 <- 8
#
# I call lapply, and use f1 function:
lapply(1:3, f1, p.2, p.3)
如果你查看了lapply的声明,你会发现:
lapply(X, FUN, ...)
#
x -> vector
FUN -> function to be applied to each element of X
... -> any other parameter that FUN may need
因此f1从值1:3获得参数a,从p.2获得参数b,从p.3获得c