Проблема
Я хотел бы знать, как передать список имен переменных в функцию purrr::map2
с целью итерации по отдельному фрейму данных.
input_table$key
Переменная ниже содержит mpg
и disp
из набора данных mtcars
. Я думаю, что имена переменных передаются в виде символьных строк, а не имен переменных. Вопрос в том, как я могу изменить это так, чтобы моя функция распознала, что они являются именами переменных (?).
В этом примере я пытаюсь суммировать все значения в mtcars
переменных mpg
иdisp
, которые падают ниже набора числовых порогов. Эти переменные из mtcars
и соответствующие пороговые значения содержатся в input_table
(ниже).
Идеальный результат
percentile key value sum_y
<fct> <chr> <dbl> <dbl>
1 0.5 mpg 19.2 266.5
2 0.9 mpg 30.1 515.8
3 0.99 mpg 33.4 609.0
4 1 mpg 33.9 642.9
5 ... ... ... ...
Попытка
library(dplyr)
library(purrr)
library(tidyr)
# Arrange a generic example
# Replicating my data structure
input_table <- mtcars %>%
as_tibble() %>%
select(mpg, disp) %>%
map_df(quantile, probs = c(0.5, 0.90, 0.99, 1)) %>%
mutate(
percentile = factor(c(0.5, 0.90, 0.99, 1))
) %>%
select(
percentile, mpg, disp
) %>%
gather(key, value, -percentile)
# Defining the function
test_func <- function(label_desc, threshold) {
mtcars %>%
select({{label_desc}}) %>%
filter({{label_desc}} <= {{threshold}}) %>%
summarise(
sum_y = sum(as.numeric({{label_desc}}), na.rm = T)
)
}
# Demo'ing that it works for a single variable and threshold value
test_func(label_desc = mpg, threshold = 19.2)
# This is where I am having trouble
# Trying to iterate over multiple (mpg, disp) variables
map2(input_table$key, input_table$value, ~test_func(label_desc = .x, threshold = .y))