使用for循环命名向量中的组件

时间:2013-11-29 10:41:16

标签: r vector components naming

我正在尝试将向量添加到for循环中的列表中,并希望根据计数器的值来命名组件

这是我在没有for循环

的情况下向列表中添加向量的方法
momentum$mom1 <- (prices[period.ends, ] / mlag(prices[period.ends,],1)-1)
momentum$mom3 <- (prices[period.ends, ] / mlag(prices[period.ends,],3)-1)
momentum$mom6 <- (prices[period.ends, ] / mlag(prices[period.ends,],6)-1)

但这看起来效率低下并且必须有一种方法来创建名称“mom1”,“mom2”和“mom3”以某种方式连接“妈妈”和我(作为循环中的计数器,假定值为1 ,3,6)。

我正在思考

momentum = list()
periods <- c(1,3,6)
for (i in periods){
    momentum$paste("mom",i,sep="")<- (prices[period.ends,]/mlag(prices[period.ends,],i)-1)

}

已广泛搜索此论坛,但似乎无法找到我的答案。我是R的初学者,所以非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

momentum = list()

periods <- c(1,3,6)

n <- length(periods)

创建列表条目后更改每个名称:

for (i in 1:n){
  momentum[[i]] <- "stuff"
  names(momentum)[i] <- paste("mom",i,sep="")
}

现在对象动量具有所需的名称

答案 1 :(得分:1)

对列表的双方括号分配将评估其参数:

> z=list()
> n="foo"
> z[[n]]=99
> z
$foo
[1] 99

所以你的不可复制的例子将是:

for (i in periods){
    momentum[[paste0("mom",i)]] <- (prices[period.ends,]/mlag(prices[period.ends,],i)-1)

或者你可以构造一个没有名字的列表,创建一个名称向量,然后使用names(momentum) = paste0("mom",periods)

将其分配给列表