在嵌套的管道函数中使用正确的范围获取它们所需的参数

时间:2017-12-15 17:15:29

标签: r scope dplyr pipe metaprogramming

我正在尝试从当前人口调查中的大约900万人记录中准备各种摘要。我有一个数据集,CPS,我希望匹配该数据集中列的多个列名,以及一个参数向量;这些意味着在管道的不同位置进入管道系列的dplyr变换。 (pipechain?管道序列?)

为了实现后者,我已将完成工作的管道放入辅助功能q_m中。我的主要功能q_means然后通过do.call调用q_m,其中包含一个包含主要实际参数的参数列表,并以正式名称命名。

在这种特殊情况下,我试图通过每年的adj_inc分位数范围来考虑adj_inc的加权平均值,但我试图理解如何将此函数构造为一般计算加权分组统计量的模板。我在这种元编程方面相当新,并且在获得需要具有正确范围和评估状态的论据时遇到困难。

目前我收到错误消息 “groups_df_impl中的错误(数据,unname(vars),drop):列.grps未知”,但我已经使用此功能数小时,并且已经实现了惊人的错误消息多样性。我很确定我的方法或者可能是一些事情,更基本的东西是错误的。

以下是可重现性的小型合成数据集的代码:

set.seed(1776)
rand<- round(abs(rnorm(20, 1000, 50)))
test_dat <- tibble(year=rep(1:2, times=c(10,10)), adj_inc=30001:30020, 
                   wtsupp=5 * rand)

以下是我的功能和参数:

q_m     <- function(.dt, .inc, .wts=NULL, 
                    .probs=c(0, .25, .5, .75, 1), .grps){
    group_by(.grps)}                        %>%
    mutate(inc2 = .inc,
           inc_q_groups =
             cut(inc2, breaks = wtd.quantile(
               .inc, weights = wts., probs=.probs)))  %>%
      group_by(inc_q_groups, .grps)                          %>%
      summarise(inc_q_means = wtd.mean(
        .inc, weights = .wts)) ->  out
  out
}

var_lst <- with(data=test_dat, list(.inc=adj_inc,.wts=wtsupp, 
                                      .probs=c(0, 0.5, 1)), .grps=year)  

q_means <- function(data = test_dat, var_lst){
  out <- do.call(q_m, c(list(.dt = data), var_lst))
}

test_output  <- q_means(test_dat, var_lst)

我期望的答案,假设非插值版本的分位数等,第1年约为30007.9,30003.0,第2年为30018.0,30013.0。

0 个答案:

没有答案