Использование аккуратной функции оценки внутри мутирования без явной ссылки на исходный фрейм данных - PullRequest
0 голосов
/ 16 октября 2018

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

library(tidyverse)

# Toy Data
df <- tibble::tribble(
  ~id, ~first_name, ~gender, ~height,
  1,   "john",      "m",     71,
  2,   "jane",      "f",     64,
  3,   "sally",     "f",     65
)

double_it <- function(df, x) {
  x <- enquo(x)
  pull(df, !!x) * 2
}

df %>% mutate(height_2 = double_it(., height))

# A tibble: 3 x 5
     id first_name gender height height_2
  <dbl> <chr>      <chr>   <dbl>    <dbl>
1     1 john       m          71      142
2     2 jane       f          64      128
3     3 sally      f          65      130

Но я хотел бы получить следующее:

double_it <- function(x) {
  ???
}

df1 %>% mutate(height_2 = double_it(height))

# A tibble: 3 x 5
     id first_name gender height height_2
  <dbl> <chr>      <chr>   <dbl>    <dbl>
1     1 john       m          71      142
2     2 jane       f          64      128
3     3 sally      f          65      130

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете использовать .data$ в качестве префикса:

library(tidyverse)

# Toy Data
df1 <- tibble::tribble(
  ~id, ~first_name, ~gender, ~height,
  1,   "john",      "m",     71,
  2,   "jane",      "f",     64,
  3,   "sally",     "f",     65
)

double_it <- function(x) {
  x * 2
}

df1 %>% mutate(height_2 = double_it(.data$height))
#> # A tibble: 3 x 5
#>      id first_name gender height height_2
#>   <dbl> <chr>      <chr>   <dbl>    <dbl>
#> 1     1 john       m          71      142
#> 2     2 jane       f          64      128
#> 3     3 sally      f          65      130

или просто использовать height напрямую:

double_it <- function(x) {
  x * 2
}

df1 %>% mutate(height_2 = double_it(height))
#> # A tibble: 3 x 5
#>      id first_name gender height height_2
#>   <dbl> <chr>      <chr>   <dbl>    <dbl>
#> 1     1 john       m          71      142
#> 2     2 jane       f          64      128
#> 3     3 sally      f          65      130
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...