R:mutate在自写函数中不会生成新列

时间:2019-02-22 21:11:48

标签: r dplyr mutate

我想编写一个函数来计算前两列之间的差异,然后取它们的平均值。

  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)

enter image description here

谢谢!

1 个答案:

答案 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)

}