将参数数据帧传递给 pmap (purrr)

passing a dataframe of parameters to pmap (purrr)

按照 Hadley Wickams 的指导 r for data science ,我想将参数数据框传递给用户定义的函数。

但是,由于参数作为字符存储在数据帧 (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)

感谢任何帮助。

您没有提供数据,所以我创建了一些假数据来演示您的解决方案。您正在寻找的可能是 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