2016-03-23 48 views
0

我期待創建一個我想要分配特定值的向量列表。我知道我可以做類似創建多個變量,分配屬性,在for循環中分配值

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有一個想法? 基本問題是,我有這個長長的矢量列表(這裏用「other_list」表示)。該列表中的每個矢量都有36個條目。我想把這些向量分成三個不同的向量(我需要從「other_list」中指定向量的具體值,我想應用到「new_list」的向量的具體值。 謝謝!

+1

'assign'不是初學者應該使用的函數。它通常只提供一種明顯的解決方案,使後續步驟對您而言更加困難。 – Roland

回答

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))) 
+0

嗨,謝謝你的回答! 我按照你的建議做了,但沒有在「分配名稱」步驟中工作。 當我輸入代碼「名稱(mylist)< - paste0(」Mx「,seq_len(n))」「然後運行它,它不顯示任何警告消息。然後,我鍵入在控制檯上顯示「MYLIST」,並顯示它是這樣的: $ NULL $ NULL – John

+0

...哦,現在它的工作...我已經抹去所有的記憶思維。非常感謝 :) – John