Передача кадра данных параметров в pmap (purrr)
Следуя указаниям Хэдли Викамса по науке о данных, я хочу передать набор данных параметров пользовательской функции.
Тем не менее, поскольку параметры хранятся в виде символов в кадре данных ( df_params), у меня возникают проблемы с оценкой, в частности с оценкой моего параметра df. Например, вот функция:
`f <- function(df, group1, region1) {
g1 <- as.name(group1)
reg1 <- enquo(region1)
x <- filter(df, (!!g1) == !!reg1) %>% select(country)
print(x)
}
У меня нет проблем с передачей f(df, 'group', 'region'). Однако я хочу, чтобы f('df', 'group', 'region') оценивал 'df' как объект в моей глобальной среде вместо символа.
Я предполагаю (надеюсь), что исправив это, я смогу пройти
df_params %>% pmap(f)
Любая помощь приветствуется.
1 ответ
Вы не предоставили данные, поэтому я создал поддельные данные, чтобы продемонстрировать их решение. То, что вы ищете, скорее всего, get()
функция.
Сначала для некоторых поддельных данных
> df1 <- data.frame(animal1 = rep(c('cat','dog'),5),
+ animal2 = c(rep(c('cat','snake','dog'),3), 'dog'),
+ country = c('USA','USA','USA','NK','NK','NK','NK','USA','MEX','MEX'),
+ stringsAsFactors = F)
animal1 animal2 country
1 cat cat USA
2 dog snake USA
3 cat dog USA
4 dog cat NK
5 cat snake NK
6 dog dog NK
7 cat cat NK
8 dog snake USA
9 cat dog MEX
10 dog dog MEX
Это ваша текущая функция, которая дает вывод ниже:
> f <- function(df, group1, region1) {
+ g1 <- as.name(group1)
+ reg1 <- enquo(region1)
+ x <- filter(df, (!!g1) == !!reg1) %>% select(country)
+ print(x)
+ }
>
> f(df1, 'animal1', 'dog')
country
1 USA
2 NK
3 NK
4 USA
5 MEX
Мы можем изменить это, просто добавив get(df)
к вашей функции фильтра. Вы можете видеть, что это дает нам тот же результат.
> f2 <- function(df, group1, region1) {
+ g1 <- as.name(group1)
+ reg1 <- enquo(region1)
+ x <- filter(get(df), (!!g1) == !!reg1) %>% select(country)
+ print(x)
+ }
>
> f2('df1', 'animal1', 'dog')
country
1 USA
2 NK
3 NK
4 USA
5 MEX