使用R中的for循环向表达式添加两个下标 [英] Add Two Subscripts to Expression with For Loop in R
本文介绍了使用R中的for循环向表达式添加两个下标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我当前有向量:
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)
这篇关于使用R中的for循环向表达式添加两个下标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文