Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dplyr 0.7.1中排列函数_R_Dplyr_Tidyverse_Rlang_Tidyeval - Fatal编程技术网

在dplyr 0.7.1中排列函数

在dplyr 0.7.1中排列函数,r,dplyr,tidyverse,rlang,tidyeval,R,Dplyr,Tidyverse,Rlang,Tidyeval,我试图在使用dplyr编写函数时使用新的quo功能,但遇到以下问题: df <- tibble( g1 = c(1, 1, 2, 2, 2), g2 = c(1, 2, 1, 3, 1), a = sample(5), b = sample(5) ) 但在新的结构中,我不知道如何处理。我试过: my_arrange <- function(df, arrange_var) { quo_arrange_var <- enquo(arrange_var)

我试图在使用dplyr编写函数时使用新的quo功能,但遇到以下问题:

df <- tibble(
  g1 = c(1, 1, 2, 2, 2),
  g2 = c(1, 2, 1, 3, 1),
  a = sample(5), 
  b = sample(5)
)
但在新的结构中,我不知道如何处理。我试过:

my_arrange <- function(df, arrange_var) {
  quo_arrange_var <- enquo(arrange_var)

  df %>%
    arrange(-!!quo_arrange_var==2, !!quo_arrange_var)
}
我也尝试过使用“你”这个名字:

my_arrange <- function(df, arrange_var) {
  quo_arrange_var <- enquo(arrange_var)

  df %>%
    arrange(-!!(paste0(quo_name(quo_arrange_var), "==2")), !!quo_arrange_var)
}

任何帮助都将不胜感激

最简单的修复方法是在爆炸声周围加上括号。这与运算符相对于
的优先级有关
==
。当你有
!!a==b
,它被解析为
!!(a==b)
即使您想要
(!!a==b
)。由于某种原因,您可以将一个quosure与一个数值进行比较
quo(a)==2
返回
FALSE
,因此您的表达式计算为
arrange(-FALSE,g2)
,这将给您相同的错误消息

my_arrange <- function(df, arrange_var) {
  quo_arrange_var <- enquo(arrange_var)

  df %>%
    arrange(-((!!quo_arrange_var)==2), !!quo_arrange_var)
}
my_arrange(df, g2)
# # A tibble: 5 x 4
#      g1    g2     a     b
#   <dbl> <dbl> <int> <int>
# 1     1     2     5     4
# 2     1     1     2     5
# 3     2     1     4     3
# 4     2     1     3     1
# 5     2     3     1     2
myu\u
 Error in arrange_impl(.data, dots) : 
  incorrect size (1) at position 1, expecting : 5 
my_arrange <- function(df, arrange_var) {
  quo_arrange_var <- enquo(arrange_var)

  df %>%
    arrange(-!!(paste0(quo_name(quo_arrange_var), "==2")), !!quo_arrange_var)
}
 Error in arrange_impl(.data, dots) : 
  Evaluation error: invalid argument to unary operator. 
my_arrange <- function(df, arrange_var) {
  quo_arrange_var <- enquo(arrange_var)

  df %>%
    arrange(-((!!quo_arrange_var)==2), !!quo_arrange_var)
}
my_arrange(df, g2)
# # A tibble: 5 x 4
#      g1    g2     a     b
#   <dbl> <dbl> <int> <int>
# 1     1     2     5     4
# 2     1     1     2     5
# 3     2     1     4     3
# 4     2     1     3     1
# 5     2     3     1     2