Я пытаюсь использовать условные выражения в функциях dplyr, чтобы построить блестящий сюжет. У меня есть следующий тиббл:
head(example)
# A tibble: 20 x 7
producto med_corte1_semana genero aspecto calidad calibre anyo
<chr> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 Pepino NA Almería Sin clasificar ~ Sin clasi~ Sin clasi~ 2012
2 Pimiento NA California r~ rojo Sin clasi~ M 2012
3 Pimiento NA California r~ rojo Sin clasi~ Sin clasi~ 2012
4 Pimiento NA California r~ rojo Sin clasi~ Sin clasi~ 2012
5 Pimiento 1,12 California r~ rojo Sin clasi~ Sin clasi~ 2012
6 Pimiento NA California r~ rojo Sin clasi~ Sin clasi~ 2012
7 Pimiento NA California n~ naranja Sin clasi~ Sin clasi~ 2012
8 Pimiento NA California a~ amarillo Sin clasi~ G 2012
9 Pepino 1,20 Snack Sin clasificar ~ Sin clasi~ Sin clasi~ 2012
10 Pepino NA Almería Sin clasificar ~ Sin clasi~ Sin clasi~ 2012
11 Pimiento 1,22 Sweet-Bite n~ naranja E Sin clasi~ 2012
12 Pimiento NA Ramiro Sin clasificar Sin clasi~ Sin clasi~ 2012
13 Pimiento 1,40 California r~ rojo II Sin clasi~ 2012
14 Pimiento NA California a~ amarillo Sin clasi~ S 2012
15 Pepino 1,54 Almería Sin clasificar ~ Sin clasi~ Sin clasi~ 2012
16 Tomate NA Baby-Plum Sin clasificar ~ I Sin clasi~ 2012
17 Pimiento 1,37 Sweet-Bite r~ rojo I Sin clasi~ 2012
18 Pimiento NA Sweet-Bite n~ naranja Sin clasi~ Sin clasi~ 2012
19 Pimiento NA Ramiro Sin clasificar Sin clasi~ Sin clasi~ 2012
20 Pimiento 1,14 California r~ rojo Sin clasi~ Sin clasi~ 2012
В Shiny у меня есть 2 входа для выбора. Первый вход предназначен для продукта (producto), и его начальное значение - «Todos» (все). Когда пользователь выбирает продукт (Pepino, Pimiento, Tomate ...), он может видеть второй вход выбора, и у него есть возможность выбрать фильтр (genero, aspecto, calidad, calibre) для группировки. Я пытаюсь преобразовать данные следующим образом:
profitabilitySum <- function() {
product <- input$sumProduct
filter_choice <- input$sumFilter
applied_filter <- names(filters[match(filter_choice, filters)])
f_period <- input$sumPeriod[1]
s_period <- input$sumPeriod[2]
subdata <- agrodata %>%
filter(!is.na(med_corte1_semana)) %>%
{if(product != "Todos") filter(producto == product)} %>%
filter(between(anyo, f_period, s_period)) %>%
{if(product != "Todos") group_by(filtro = producto) else group_by(filtro = get(applied_filter))} %>%
summarise(precio = mean(med_corte1_semana)) %>%
mutate_if(is.numeric, round, roundDecimals)
return(subdata)
}
И сначала я получаю эту ошибку:
Error in UseMethod: no applicable method for 'filter_' applied to an object of class "NULL"
Если я прокомментирую строку
{if(product != "Todos") filter(producto == product)} %>%
It возвращает другую ошибку:
Error in get: invalid first argument
Дело в том, что если я попытаюсь выполнить тот же код без условных операторов, он будет работать независимо от того, какое условие я выберу ...