2014-10-31 100 views
2

我在循環內創建數據框。數據框的名稱應該是名稱和數字的組合(循環迭代)。我使用assign函數來完成這個工作。我也想爲數據框的行分配名稱。我嘗試了兩種方法,但是我收到了錯誤消息:「賦值目標擴展到非語言對象」和「僅第一個元素用作變量名稱」。下面是我試圖做的一個可重複的例子。將循環內的rownames賦值給構造的變量名稱

rows<-c("a","b") 
df<-data.frame(var1=c(1,2),var2=c(10,20)) 
for (n in 1:2){ 
    assign (paste("data",n,sep="_"),df) 
    rownames(get(paste("data",n,sep="_")))<-rows  # it doesn't work 
    assign(rownames(get(paste("data",n,sep="_"))),rows) # it doesn't work 
} 

我想知道它爲什麼不起作用以及如何解決它。我發現類似的線程,如thisthis,但我無法解決我的情況。謝謝。

+0

這已經在這裏問了很多次。答案總是「不要那樣」。而是把你的data.frames放在一個列表中。 – Roland 2014-10-31 19:47:38

回答

1

基於羅蘭的評論,我出來與此解決方案:

rows<-c("a","b") 
df<-data.frame(var1=c(1,2),var2=c(10,20)) 
dfs<-list() 
for (n in 1:2){ 
    dfs[[n]]<-df 
    rownames(dfs[[n]])<-rows 
} 

名單是關鍵!

0

或者沒有列表,你只需要一個虛擬變量:

rows<-c("a","b") 
df<-data.frame(var1=c(1,2),var2=c(10,20)) 
for (n in 1:2){ 
    assign (paste("data",n,sep="_"),df) 
    labelling <- get(paste("data",n,sep="_")) 
    labels <- rows 
    rownames(labelling)<-labels 
    assign(paste("data",n,sep="_"),labelling) 
}