Является ли base :: noquote приемлемым способом программирования с использованием dplyr? - PullRequest
1 голос
/ 07 марта 2019

У меня есть функция, которая принимает фрейм данных и должна собирать его по разным столбцам в зависимости от переданного набора данных. Поэтому мне нужен способ сообщить функции gather(), какие столбцы нужно собирать динамически.Мне любопытно, если передача столбцов функции в виде строк, а затем использование noqoute() - лучший способ сделать это.Код в настоящее время работает, но я чувствую, что, возможно, упускаю что-то, что может в конечном итоге сломать код.Вот мой код:

library(tidyverse)

# Data will always take a wide format similar to this
raw_dat <- tibble(id = 1:30, 
       garbage = letters[runif(30, min = 1, max = 26)], 
       group1 = runif(30, min = 200, max = 5000),
       group2 = runif(30, min = 200, max = 5000),
       group3 = runif(30, min = 200, max = 5000),
       group4 = runif(30, min = 200, max = 5000),
       group5 = runif(30, min = 200, max = 5000),
       garbage2 = letters[runif(30, min = 1, max = 26)],
       garbage3 = letters[runif(30, min = 1, max = 26)])

raw_dat
#> # A tibble: 30 x 9
#>       id garbage group1 group2 group3 group4 group5 garbage2 garbage3
#>    <int> <chr>    <dbl>  <dbl>  <dbl>  <dbl>  <dbl> <chr>    <chr>   
#>  1     1 n        2234.  4852.  4745.  4381.  3331. v        l       
#>  2     2 y        3749.  2084.  2555.  3445.  3288. y        e       
#>  3     3 x        1796.  1088.  2300.  2425.  2124. u        j       
#>  4     4 m        3912.   646.   497.  4669.  2532. g        c       
#>  5     5 y         344.   559.  1989.  4459.  4139. x        m       
#>  6     6 k        4671.  1215.  1568.  3802.  1536. y        p       
#>  7     7 g        3117.  3797.   391.  3192.  2695. t        l       
#>  8     8 x         230.  1277.  4450.  3437.  1235. c        o       
#>  9     9 x         491.   871.  4559.  4010.  4478. b        r       
#> 10    10 l         292.   701.   903.  2308.  4573. e        e       
#> # … with 20 more rows

# This number will change by varying datasets and user entry
input_groups <- names(raw_dat)[3:7]

# My function does more than this but I am concerned with making this part dynamic
compute_values <- function(df, input_g){
  df %>% 
    gather(key = "input_group", value = "input_value", noquote(input_g))
}

compute_values(raw_dat, input_groups)
#> # A tibble: 150 x 6
#>       id garbage garbage2 garbage3 input_group input_value
#>    <int> <chr>   <chr>    <chr>    <chr>             <dbl>
#>  1     1 n       v        l        group1            2234.
#>  2     2 y       y        e        group1            3749.
#>  3     3 x       u        j        group1            1796.
#>  4     4 m       g        c        group1            3912.
#>  5     5 y       x        m        group1             344.
#>  6     6 k       y        p        group1            4671.
#>  7     7 g       t        l        group1            3117.
#>  8     8 x       c        o        group1             230.
#>  9     9 x       b        r        group1             491.
#> 10    10 l       e        e        group1             292.
#> # … with 140 more rows

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

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