2012-03-13 69 views
1

我想將循環內創建的數據分配給相應序列的順序編號變量。正如所寫,本例中的循環會簡單地覆蓋每一次,因此所有被存儲的都是分配給矩陣傀儡的最終數據集。我想要做的是讓每個迭代都創建一個名爲「somename(counter)」的新變量,並將矩陣傀儡的當前值存儲在該變量中。然後,下面的循環應創建變量some​​name0,其值爲0,0,0,0,somename1,值爲1:4,somename2的值爲2,4,6,8。我認爲在循環中動態創建變量最好是自動化變量的命名和創建多少個變量。按順序命名變量(初學者)

例如:

no_its <- 3 
counter <- 0 
while(counter < no_its){ 
    a <- c(counter*(1:4)) 
    stooges <- as.matrix(a) 
    rownames(stooges)<-c("Larry","Moe","Curly","Shemp") 
    counter <- counter+1 
} 
stooges 

output: 
     [,1] 
Larry 2 
Moe  4 
Curly 6 
Shemp 8 
+1

是否有你想使用命名變量而不是創建矩陣或數據框或列表或任何數據的原因structu更適合這項任務的資源? – Dason 2012-03-13 23:57:17

+3

R的做法是讓循環將每次迭代存儲爲列表中的新元素。然後,系統地遍歷列表很容易。 – 2012-03-13 23:57:30

+0

http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-turn-a-string-into-a-variable_003f – 2012-03-14 02:58:30

回答

2

嘗試使用列表,它總是會被證明是更好的選擇R中

counter <- 0:2 
names(counter) <- paste("somename",seq_along(counter)-1,sep="") 
(result <- lapply(counter, function(counter) counter*1:4)) 
result[["somename1"]] 
## only if you must 
attach(result, pos=2) 
ls(pos=2) 
+0

好的,我可能沒有明確表達我的意思情況很好。我的實際代碼比上面描述的簡單例子複雜得多。我的輸入數據是一個帶有rownames列表的列表,列出了分類和列名樣品。循環的迭代產生輸入矩陣的隨機(或概率加權)子採樣,並因此生成具有恆定數量的列的矩陣,但是具有可變(和未知)數量的行。我需要爲每個輸出矩陣分配一個名稱,以便稍後可以引用它們。 – 2012-03-14 16:11:26

+0

無論「lapply」調用的函數有多複雜,都應該應用相同的想法;這是它的美麗。 – baptiste 2012-03-14 18:51:25

+0

非常感謝。稍微調整一下,你的代碼就可以完成這項工作。對業餘問題抱歉。 – 2012-03-15 15:22:57

0

如果你想有一個矩陣,然後創建一個空的矩陣,然後填充它:

stooges <- matrix(NA, ncol=4, nrow=4) 
row.names(stooges)<-c("Larry","Moe","Curly","Shemp") 
stooges[1:4, 1:4] <- col(stooges) * 1:4 
stooges 
#--------- 
     [,1] [,2] [,3] [,4] 
Larry 1 2 3 4 
Moe  2 4 6 8 
Curly 3 6 9 12 
Shemp 4 8 12 16