R

时间:2018-10-12 10:48:22

标签: r

我才刚刚开始在R中使用准引号,并且遇到了一个我似乎无法解决的关于灵活分组的问题。

通常,这与我想做的事情很接近:

# dependencies
library(dplyr)
library(rlang)

# create data set
df <- tibble(a = factor(c(1, 2, 1, 2, 1, 2)),
             b = factor(c(3, 3, 4, 4, 3, 4)),
             c = factor(c(5, 5, 5, 6, 6, 6)))


# function
grouping <- function(.data, g, ...) {
  g <- enquo(g)
  more <- enquos(...)

  .data %>%
    group_by(!!g, !!!more)
}

# run tests
grouping(df, a)
grouping(df, a, b)
grouping(df, a, b, c)

输出正确,例如

grouping(df, a, b)  

小标题:6 x 3
群组:a,b [4]
(...)

但是,一旦我不使用...就会遇到问题,具体来说,我想进行一些计算,首先将灵活的内部因素数量和灵活的因素之间因素数量进行分组。因为我还需要分别处理内部因素和内部因素,所以...将不再起作用。

因此,我的通话最终应该看起来像

do_calculations(data, between = list(), within = list())

我现在遇到的问题是现在分组失败了。回到我的初始示例(一旦找到一个列表,第二个应该很容易):

# function
grouping <- function(.data, g, g2 = list()) {
  g <- enquo(g)
  more <- enquos(g2)

  .data %>%
    group_by(!!g, !!!more)
}

导致错误

  

mutate_impl(.data,点)中的错误:     列list(b, c)的长度必须为6(行数)或1,而不是2

因此,总而言之,我想显式地给我的函数一个向量或列表,而不是...,然后再按此列表中的所有元素分组。

感谢您的帮助!

0 个答案:

没有答案