向量元素的提取

问题描述 投票:0回答:1

我正在优化一个函数,该函数将大小约为 300 的向量作为输入。该目标函数调用其他几个函数,每个函数都使用输入向量的子集。该设置的示例如下:

mainprog <- function(theta){
    alpha <- theta[1:20]
    beta <- theta[21:35]
    ...
    fun1(alpha)
    fun2(beta)
    ...
    return(X)
}

出于优雅、维护和理智的原因,我不想像上面的示例那样对

alpha
beta
进行硬编码。定义这些子向量
alpha
beta
的好方法是什么?

我唯一的限制是我希望能够使用优化器来优化

theta
而不会遇到太多麻烦。有人对如何去做有任何建议吗?

r
1个回答
0
投票

您可以编写一个默认为整个向量

theta
的函数,并提供
alpha
beta
参数来对其进行子集化,如果未指定
beta
,则默认为
alpha

> mainprog <- function(theta, alpha=seq_along(theta), beta=alpha) {
+   s1 <- sqrt(theta[alpha])
+   s2 <- sqrt(theta[beta])
+   return(list(s1, s2))
+ }
> 
> mainprog(1:10)
[[1]]
 [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427 3.000000 3.162278

[[2]]
 [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427 3.000000 3.162278

> mainprog(1:10, 1:3)
[[1]]
[1] 1.000000 1.414214 1.732051

[[2]]
[1] 1.000000 1.414214 1.732051

> mainprog(1:10, 1:3, 7:10)
[[1]]
[1] 1.000000 1.414214 1.732051

[[2]]
[1] 2.645751 2.828427 3.000000 3.162278

错误的规格很容易产生

NA

> mainprog(1:10, 1:3, 7:13)
[[1]]
[1] 1.000000 1.414214 1.732051

[[2]]
[1] 2.645751 2.828427 3.000000 3.162278       NA       NA       NA
© www.soinside.com 2019 - 2024. All rights reserved.