R: mutate не генерирует новый столбец в функции самостоятельной записи - PullRequest
0 голосов
/ 23 февраля 2019

Я хотел бы написать функцию, вычисляющую различия между первыми двумя столбцами, а затем взять их среднее значение.

  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 голосов
/ 23 февраля 2019

Вы бы сделали что-то вроде:

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)

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...