如何在 c() 函数中重复元素?
How to repeat elements in c() function?
我正在使用组合函数 c()
来定义 gradient
:
eval_f <- function( x, param, n ) {
return(list("objective" = x[5] * (param[1] - param[2] / sum(x[1:4])),
"gradient" = c( x[5] * param[2] / (x[1] * x[1]),
x[5] * param[2] / (x[2] * x[2]),
x[5] * param[2] / (x[3] * x[3]),
x[5] * param[2] / (x[4] * x[4]),
param[1] - param[2] / sum(x[1:4])
) ) )
}
可以看到渐变包含具有相同结构的元素:x[5] * param[2] / (x[...] * x[...])
问题。是否可以使用标准函数(如rep(c(...), times=n)
)创建gradient
?
你可以这样做:
eval_f <- function( x, param, n ) {
return(list(objective = x[5] * (param[1] - param[2] / sum(x[1:4])),
gradient = c(x[5] * param[2] / (x[1:4]^2),
param[1] - param[2] / sum(x[1:4])
)))
}
或者也可以使用 (x[1:4] * x[1:4])
,如果您喜欢 (x[1:4] * x[1:4])
而不是 (x[1:4]^2)
。
我正在使用组合函数 c()
来定义 gradient
:
eval_f <- function( x, param, n ) {
return(list("objective" = x[5] * (param[1] - param[2] / sum(x[1:4])),
"gradient" = c( x[5] * param[2] / (x[1] * x[1]),
x[5] * param[2] / (x[2] * x[2]),
x[5] * param[2] / (x[3] * x[3]),
x[5] * param[2] / (x[4] * x[4]),
param[1] - param[2] / sum(x[1:4])
) ) )
}
可以看到渐变包含具有相同结构的元素:x[5] * param[2] / (x[...] * x[...])
问题。是否可以使用标准函数(如rep(c(...), times=n)
)创建gradient
?
你可以这样做:
eval_f <- function( x, param, n ) {
return(list(objective = x[5] * (param[1] - param[2] / sum(x[1:4])),
gradient = c(x[5] * param[2] / (x[1:4]^2),
param[1] - param[2] / sum(x[1:4])
)))
}
或者也可以使用 (x[1:4] * x[1:4])
,如果您喜欢 (x[1:4] * x[1:4])
而不是 (x[1:4]^2)
。