在 R 中使用 For 循环向表达式添加两个下标

Add Two Subscripts to Expression with For Loop in R

我目前有向量:

myvector <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21)

并希望使用 R 中的 for loop 将其添加到表达式中。 到目前为止,我已经完成了:

new.list <- list()
for(i in myvector){
  new.list[[i]] <- expression(beta[1][i])
}

但得到结果:

[[1]]
expression(beta[1][i])

[[2]]
expression(beta[1][i])

[[3]]
expression(beta[1][i])

[[4]]
expression(beta[1][i])

[[5]]
expression(beta[1][i])

[[6]]
expression(beta[1][i])

[[7]]
expression(beta[1][i])

[[8]]
expression(beta[1][i])

[[9]]
expression(beta[1][i])

[[10]]
expression(beta[1][i])

[[11]]
NULL

这一直持续到循环中的最终值。我不清楚为什么 i 没有在这个循环中更新,以及我如何才能确保它得到更新。我试过将 expression 更改为 expression(beta[1,i]) 并得到相同的结果。正常打印i时,正常。

提前致谢。

如果我理解正确,你的目标是拥有相同的列表,但 i 从 1 变为 21。

试试这个:

myvector <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 17, 18, 19, 20, 21)

new.list <- list()
for(i in myvector){
 new.list[[i]] <- substitute(expression(beta[1][i]), list(i = i))
}
head(new.list)
#> [[1]]
#> expression(beta[1][1])
#> 
#> [[2]]
#> expression(beta[1][2])
#> 
#> [[3]]
#> expression(beta[1][3])
#> 
#> [[4]]
#> expression(beta[1][4])
#> 
#> [[5]]
#> expression(beta[1][5])
#> 
#> [[6]]
#> expression(beta[1][6])

i 之前无法更新,因为它包含在表达式中。

使用 substitute 您可以编写相同的表达式,但您可以指定一个环境(在本例中为简单列表),函数可以在其中找到要在表达式中设置的实际替换项。


您也可以使用 lapply 而不是 for 循环:

new.list <- lapply(1:21, function(x) substitute(expression(beta[1][i]), list(i = x)))
new.list[setdiff(1:21, myvector)] <- list(NULL)