我想写一个函数计算前两列之间的差异,然后取平均值。
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))
此函数不会生成名为“Error”的新列并返回NA:
errors(dt, true, pred)
我期望该函数对数据框进行以下更改,然后取平均误差。
mutate(dt, Error = pred-true)
谢谢!
你会做类似的事情:
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)
}