Оценить выражение с помощью вычисления переменных в функции - PullRequest
0 голосов
/ 07 марта 2019

По сути, я хочу создать функцию add_trend, которая будет привязана к исходному набору данных.Однако я хочу сделать это с помощью выражения.Например, .t = линейный тренд, .t + .t^2 = квадратичный тренд.

.data <- tibble::tibble(
  x = rnorm(100),
  y = rnorm(100))


add_trend <- function(.data, .f = NULL) {

  .t <- 1:NROW(.data)

  .expr <- quote(.f)
  eval(.expr)
}

add_trend(.data, .t^2)
#> Error in eval(.expr): object '.t' not found

Создано в 2019-03-07 пакетом Представить (v0.2.1)

Это должно что-то делать ссреда, в которой он оценивается.Если я сохраню .t в Global_Env, то функция сработает, но когда она будет выполнена внутри функции, появится вышеуказанная ошибка.Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 07 марта 2019

Использование substitute вместо quote:

add_trend <- function(.data, .f = NULL) {
  .t <- 1:NROW(.data)
  .expr <- substitute(.f)
  eval(.expr)
}

From help("quote")

substitute возвращает дерево разбора для (без оценки)выражение expr, подставляя любые переменные, связанные в env.

quote просто возвращает свой аргумент.Аргумент не оценивается и может быть любым выражением R.

...