Применить несколько функций к двум фреймам данных по столбцам

Учитывая следующие примерные данные:

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 functionsили plyr?

В выводе имена строк resultявляются column names либо obs1, либо pred1, а имена столбцов mae, mse,rmse,se и т. д.


person code123    schedule 26.04.2016    source источник
comment
Пожалуйста, не кричи.   -  person zx8754    schedule 26.04.2016


Ответы (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)
person tcash21    schedule 26.04.2016
comment
пожалуйста, можете ли вы использовать свой код для примера данных и дать решение, из которого я могу извлечь уроки? Спасибо. - person code123; 26.04.2016