2015-07-01 42 views
1

我正在嘗試使用函數創建包含0行的四個變量數據框。我在這裏有兩個要求。如何使用函數中傳遞的參數動態地命名R函數內的數據集?

1)新創建的數據幀的名稱應爲參數傳遞 2)在數據幀的第二變量的名稱應該是參數傳遞

我試圖用下面的代碼這樣做:

sim<-function(df,df1){ 

y<-df1 

assign(paste(y),data.frame(Var1=numeric(), Var2=numeric(), Var3=numeric(), 
          Var4=numeric()),envir=.GlobalEnv) 

colnames(df)[2]<-paste(y) 

return(names(df)) 
} 

sim(test,"test") 

colnames(test) 

我得到以下輸出:

SIM(測試, 「測試」)

[1] 「VAR1」, 「測試」, 「VAR3」 「VAR4」

colnames(測試)

[1] 「VAR1」 「VAR2」 「VAR3」 「VAR4」

我不明白的是,當R可以理解「測試」列名被修改並且它在運行期間返回修改後的名稱時,數據框的「測試」列名在該函數外仍然保持不變。我將不勝感激任何幫助,使這項工作。

謝謝!

+0

你能詳細描述一下你在大圖中想要達到的目標嗎?使用函數來創建全局環境是可以的,但也許有更好的方法。 –

+1

我試圖動態地命名每次使用函數時創建的數據集。如上所述,我希望創建的全局df採用參數的名稱(在上面的情況下,它的'測試'),我可以使用上面的代碼實現該參數。但第二個條件是將第二個變量重命名爲參數的名稱(在'test'之上的情況下),這是我無法實現的。我在這裏尋找解決方案或解決方法。感謝您的回覆羅馬。 --Murali –

回答

0

我只是想了一些東西。原因爲什麼函數沒有改變'測試'的姓名是R不能改變函數內的全局數據框,除非該改變也是全局的。

因此,我可以通過使用分配功能我什麼也沒做分配修改到全球數據幀「測試」想到的是唯一的解決方法,但覆蓋「測試」

sim<-function(df,df1){ 

y<-df1  
assign(paste(y),data.frame(Var1=numeric(), Var2=numeric(), Var3=numeric(), 
          Var4=numeric()),envir=.GlobalEnv) 

colnames(df)[2]<-paste(y)  
assign(paste(y),df,envir=.GlobalEnv) 
} 

sim(test,"test") 

colnames(test) 

結果是此:

SIM(測試, 「測試」)

colnames(測試)

[1] 「VAR1」 「測試」 「VAR3」 「VAR4」

我敢肯定這是不是這樣做的有效方式。我很想知道是否有更簡單的解決方案。

相關問題