在 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)
我目前有向量:
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)