使用R中的for循环向表达式添加两个下标 [英] Add Two Subscripts to Expression with For Loop in R

查看:34
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆