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

问题描述 投票:2回答:1

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

  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)

enter image description here

谢谢!

r dplyr mutate
1个回答
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)

}
© www.soinside.com 2019 - 2024. All rights reserved.