2016-04-26 27 views
3

考慮下面的示例數據:應用多種功能於兩個dataframes逐列

library(Metrics) 

obs=data.frame(replicate(10,runif(100))) 
pred=data.frame(replicate(10,runif(100))) 

obs1=as.data.frame(lapply(obs, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ])) 
pred1=as.data.frame(lapply(pred, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ])) 

pred1[,1]=NA 

result=mapply(function(x, y) {if(all(is.na(y))) NA else mae(x, y,), mse(x,y),rmse(x,y),se(x,y) 
}, obs1,pred1,SIMPLIFY = F,USE.NAMES = TRUE) 

我想計算說mae(obs1[,1],pred1[,1])等通過mapply。我如何使用base R functionsplyr通過單個呼叫對所有其他功能執行相同操作?

在輸出中的result的rownames是要麼obs1pred1column names而colnames是mae, mse,rmse,se

+1

請不要喊。 – zx8754

回答

1

你必須寫自己的功能來指定你想申請的各種功能:

multi.fun <- function(x,y) { 
    c(mae = mae(x,y), mse = mse(x,y)) 
} 

然後,你可以這樣做:

obs=data.frame(replicate(10,runif(100))) 
pred=data.frame(replicate(10,runif(100))) 

obs1=as.data.frame(lapply(obs, function(cc) cc[ sample(c(TRUE, NA), prob =  c(0.85, 0.15), size = length(cc), replace = TRUE) ])) 
pred1=as.data.frame(lapply(pred, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ])) 

mapply(multi.fun, obs1, pred1) 
+0

請你可以使用你的代碼樣本數據,並提供一個解決方案,我可以從中學習?謝謝。 – code123

+0

這是您的代碼,只是更新。 – tcash21

+0

完美!感謝您的見解。 – code123