获取变量的值,该变量的名称基于另一个变量(在R中)

时间:2014-12-30 00:38:40

标签: r

我有一个变量列表E =(E1 = 300,E2 = 300,E3 = 300 ... E96 = 300),我将它们传递给一个函数,需要在一些方程中使用这些变量环。对于例如:

for(i in 1:96)
{
  assign(paste("dE",i,sep=""),constant*corresponding E value) ### e.g dE1 = constant*E1
}

是否有一种简单的方法可以在for循环中获取Ei变量的值?

注意:常量对应于任意常量值,在当前上下文中不感兴趣

2 个答案:

答案 0 :(得分:2)

如果你有一个命名列表E,其中每个元素的长度为1,而常量constant也是长度为1,那么你可以在没有循环的情况下进行操作。

E <- list(E1 = 300, E2 = 300, E3 = 300, E96 = 300)
constant <- 5

由于E具有名称,并且它们已经是我们想要的新值名称的一半,所以我们可以做类似的事情

setNames(constant * do.call(c, E), paste0("d", names(E)))
#  dE1  dE2  dE3 dE96 
# 1500 1500 1500 1500 

注意,如果E是一个原子向量(你没有指定),那么操作只是

constant * E

如果您需要列表结果,可以使用constant * do.call(c, E)打包as.list。如果您真的想将所有这些单个值作为变量发送到全局环境,那么您可以使用

x <- setNames(constant * do.call(c, E), paste0("d", names(E)))
list2env(as.list(x), globalenv())

但我不推荐它。最好将值保存在命名向量中。

答案 1 :(得分:0)

非常简单:

ei = E[paste("E", i, sep = "")]

请注意,如果相应的Ei值不存在,则会失败。