r - 按列将多个函数应用于两个数据框

标签 r dataframe mapply

给定以下示例数据:

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 计算 say mae(obs1[,1],pred1[,1]) 等。如何使用 base R functionsplyr 通过一次调用对所有其他函数执行相同的操作?

在输出中,result 的行名是 obs1pred1列名,而列名是 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)

关于r - 按列将多个函数应用于两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36855093/

相关文章:

r - R中应用函数族的命名/名称

r - 在 R 中是否有替代 mapply 的有效方法?

r - 根据另一个列表 mutate() 一个列表

r - Ggplot2 中的有条件着色条

r - 如何删除向量特定元素中的空格?

python - 合并 pandas 数据框中的多行并创建新列

R 聚合在函数中具有多个参数

将 NA 替换为另一个 df 按日期和城市的值

r - 使用 rvest 添加新字段到表单

r - 如何过滤R中具有特定值的参与者?