创建多个变量,分配属性,在for循环中分配值

时间:2016-03-23 14:40:32

标签: r list loops variables vector

我希望创建一个向其分配特定值的向量列表。我知道我可以做点什么

var_list=c(V1, V2...etc)

然后在for循环中使用var_list [i]。要做到这一点,我必须首先手动创建列表,这很长。 我知道我可以做点什么

for(i in 1:n){
    assign(paste("Mx", i, sep = ""), i)
}

这将创建我的变量名称。麻烦的是,我该如何管理它们?我想要一种方法来做这样的事情:

for(i in 1:n){
    attributes(assign(paste("Mx", i, sep = ""), i))<-list(dim=1:n)
    "here I would like to append the newly created variable (Mx"i") into a list so I could manage the whole thing later on".
}

所以我能做到:

for (k in 1:n){
for (j in 1:m)
new_list[[k]][j]<-other_list[[k]][(j-1)*3+1]
}

Any1有个主意吗? 基本的问题是我有这个长长的矢量列表(这里用&#34; other_list&#34;表示)。此列表中的每个向量都有36个条目。我想在三个不同的向量中划分这些向量中的每一个(我需要指定来自&#34; other_list&#34的向量的特定值;我想应用于&#34; new_list的向量的特定值&#34 ;. 谢谢!

1 个答案:

答案 0 :(得分:1)

只需预先分配列表并指定其名称:

n <- 10
#pre-allocate list
mylist <- vector(n, mode = "list")
#assign names
names(mylist) <- paste0("Mx", seq_len(n))

#fill the list
for(i in 1:n){
 mylist[[i]] <- i
}

mylist[1:3]
#$Mx1
#[1] 1
#
#$Mx2
#[1] 2
#
#$Mx3
#[1] 3

PS:你应该学会使用lapply来完成这些任务。

setNames(lapply(seq_len(n), identity), paste0("Mx", seq_len(n)))

具体例子的最佳解决方案是:

setNames(as.list(seq_len(n)), paste0("Mx", seq_len(n)))