我想编写一个函数来计算前两列之间的差异,然后取它们的平均值。
errors = function(data, true, pred){
library(dplyr)
mutate(data, Error = data$pred - data$true)
mean_err = mean(data$Error)
return(mean_err)
}
但是,此功能无法正常运行。例如,对于这样的数据源:
true = rnorm(10, 2, 20)
pred = rnorm(10, 1, 20)
dt = data.frame(cbind(true, pred))
此函数不会生成名为“错误”的新列并返回NA:
errors(dt, true, pred)
我期望该函数对数据帧进行以下更改,然后取这些错误的平均值。
mutate(dt, Error = pred-true)
谢谢!
答案 0 :(得分:2)
您将执行以下操作:
errors = function(data, true, pred) {
require(dplyr)
true <- enquo(true)
pred <- enquo(pred)
data = mutate(data, Error = !! pred - !! true)
mean_err = mean(data$Error)
return(mean_err)
}
当您追求单个值时,也可以将其缩短为:
errors = function(data, true, pred) {
require(dplyr)
true <- enquo(true)
pred <- enquo(pred)
mean_error = summarise(data, Error = mean(!! pred - !! true))
return(mean_error)
}