按列将多个函数应用于两个数据框
Apply multiple functions to two dataframes column-wise
给定以下示例数据:
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)
我想通过 mapply
计算 mae(obs1[,1],pred1[,1])
等。如何通过使用 base R functions
或 plyr
?
的单个调用对所有其他函数执行相同的操作
在输出中,result
的行名是obs1
或pred1
的column names
,而列名是mae, mse,rmse,se
等
您必须编写自己的函数来指定要应用的各种函数:
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)
给定以下示例数据:
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)
我想通过 mapply
计算 mae(obs1[,1],pred1[,1])
等。如何通过使用 base R functions
或 plyr
?
在输出中,result
的行名是obs1
或pred1
的column names
,而列名是mae, mse,rmse,se
等
您必须编写自己的函数来指定要应用的各种函数:
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)