为R中的列表元素赋值

时间:2016-08-28 10:52:27

标签: r list

假设我有一个元素列表,我想更改其中一个元素,但不能通过名称直接调用列表(我只能将其构造为字符串)。

x_1 <- list()
for (i in 1 : 5) {
   x_1[[i]] <- i
}

assign(eval(as.name(paste0("x_", 1)))[[1]], 6)

使用assign - eval - as.name - paste的这种长结构会出现错误:"first argument is wrong"

我该如何正确地做到这一点?为什么这个建筑不起作用?

2 个答案:

答案 0 :(得分:4)

您可以使用<-构建分配表达式然后使用eval(parse(text=x))来完成此操作:

x_1 <- as.list(1:5)
eval(parse(text=paste0("x_1[[1]] <-", 123)))

x_1
## 
## [[1]]
## [1] 123
## 
## [[2]]
## [1] 2
## 
## [[3]]
## [1] 3
## 
## [[4]]
## [1] 4
## 
## [[5]]
## [1] 5

如果要将索引作为变量传递,则可能更简单:

eval(parse(text=sprintf('x_1[[%s]] <- %s', 1, 123)))

答案 1 :(得分:1)

我无法想象您为什么不知道列表名称的充分理由。所以这可能是一个XY问题,你应该重新考虑你的方法。

SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); 无法在此处工作,因为它会将对象分配到环境中。那不是你想要做的。您希望将子分配到列表中。

但是,假设您有一些任意命名列表,希望您至少知道包含该列表的环境。然后你可以这样做:

assign