2014-02-13 68 views
0

我正在練習在R中使用apply函數,所以我正在編寫一個簡單的函數來應用於數據框。R:正確使用數據框作爲函數的參數

我有一個2列的數據幀。

V1 V2 
1  3 
2  4 

我決定做一些基本的算術並在第3列的答案,特別是,我想3乘以2的第一列和第二列,然後總結他們。

V1 V2 V3 
1  3  11 
2  4  16 

這是我的想法是:

mydf <- as.data.frame(matrix(c(1:4),ncol=2,nrow=2)) 
some_function <- function(some_df) {some_df[,1]*2 + 
            some_df[,2]*3} 
mydf <- apply(mydf ,2, some_function) 

但是,什麼是錯我的函數的自變量? R給我一個關於數據幀維度的錯誤。爲什麼?

+0

你選擇乘法作爲例子還是它是你的實際任務? –

+0

這只是一個例子 –

回答

1

三件事情錯:

1)申請「循環」不是每列或行的矢量,所以你只要解決了名字[1]不是[,1]
2)你需要運行行間距= 1,而不是2
3)你需要cbind結果,因爲申請不追加,所以你覆蓋矢量

mydf <- as.data.frame(matrix(c(1:4),ncol=2,nrow=2)) 

some_function <- function(some_df) {some_df[1]*2 + 
             some_df[2]*3} 

mydf <- cbind(mydf,V3=apply(mydf ,1, some_function)) 

# V1 V2 V3 
#1 1 3 11 
#2 2 4 16 

,但可能會更容易些向量運算:

mydf$V3<-mydf[,1]*2 + mydf[,2]*3 

因爲向量數學是關於R的最偉大的事情之一

+0

謝謝!這非常有幫助。 –