2017-06-16 75 views
-1

我正在處理多個數據框,並且我想要創建一個函數,它可以快速劃分數據框中的任何兩列,並在該數據框中命名一個新列。通過自定義函數保留變量名稱

我的代碼迄今:

relate.ratio = function(x, y, z) { 
     q = as.data.frame(y/z) 
     x <<- cbind2(x, q) 
    } 

我的問題是,結果保留X,Y和Z的名稱,而不是什麼我實際上作爲我的論點。可能是因爲全球分配?但是,如果沒有全球分配,我看不到其他選擇。

一個例子:

relate.ratio(Data, Data$1, Data$2) 

會給作爲結果名爲X和Y/Z的新的列名的數據幀。所有的數字都是正確的,但名字讓我絆倒了。謝謝!

+1

也許不要重新發明輪子,只需使用'transform()'?雖然它取決於你打算如何使用它。如果你不想把重點放在交互式使用上,我會傳遞列名的字符表示。無論哪種方式,函數應該返回並重新分配修改後的df,不要打擾'<< - '。 – joran

回答

0

你可以只在您的自定義功能,重命名列:

relate.ratio = function(x, y, z) { 
q = as.data.frame(y/z) 
colnames(q) = "test" 
x <<- cbind2(x, q) 
} 
0

也許這是你以後在做什麼?

relate.ratio = function(x, y, z) { 
     q = as.data.frame(y/z) 
     x <<- cbind2(x, q) 
     names(x) <<- c(deparse(substitute(x)),paste0(deparse(substitute(y)),'/',deparse(substitute(z)))) 
    } 

a <- 1:10 
b <- 10:19 
c <- 20:29 
relate.ratio(a,b,c) 
x