用dplyr :: select评估在我的函数中不起作用

亚瑟·卡瓦略·布里托

关于R中的评估问题,我真的很陌生。

example<- data.frame(id = 1:5,
                 pairs0 = c(1, 1, 1, 2, 2),
                 pairs1 = c(2, 2, 1, 1, 1)
                     )

这是我要编写的函数:

f <- function(df, col_pair){
       
       df2 <- df %>% mutate(j = row_number())

full_join(df2 %>% select(j, col_pair),
          df2 %>% select(j, col_pair),
          suffix = c('1', '2'),
          by = "{{col_pair}}",
          keep = TRUE) %>%
filter(j1 != j2)
}

该函数选择一个数据帧df并按列将其连接到自身col_pair问题是,如果我运行,则会f(example, pairs0)得到“数据中必须存在联接列”

有人可以帮忙吗?

我已经对您的函数进行了修改,您可以将其视为一个选项,因为它使用带引号的变量,并且不像使用其他评估方案那样麻烦。这里的代码:

#Function
f <- function(df, col_pair){
  
  df2 <- df %>% mutate(j = row_number())
  
  full_join(df2 %>% select(j, col_pair),
            df2 %>% select(j, col_pair),
            suffix = c('1', '2'),
            by = col_pair,
            keep = TRUE) %>%
    filter(j1 != j2)
}
#Apply
f(example, 'pairs0')

输出:

  j1 pairs01 j2 pairs02
1  1       1  2       1
2  1       1  3       1
3  2       1  1       1
4  2       1  3       1
5  3       1  1       1
6  3       1  2       1
7  4       2  5       2
8  5       2  4       2

另外,如果需要非标准评估,则可以使用以下方法:

#Option 2
f <- function(df, col_pair){
  
  var <- enquo(col_pair)
  
  df2 <- df %>% mutate(j = row_number())
  
  full_join(df2 %>% select(j, !!var),
            df2 %>% select(j, !!var),
            suffix = c('1', '2'),
            by = rlang::as_name(var),
            keep = TRUE) %>%
    filter(j1 != j2)
}

我们适用:

#Apply
f(example, pairs0)

输出:

  j1 pairs01 j2 pairs02
1  1       1  2       1
2  1       1  3       1
3  2       1  1       1
4  2       1  3       1
5  3       1  1       1
6  3       1  2       1
7  4       2  5       2
8  5       2  4       2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章