代码之家  ›  专栏  ›  技术社区  ›  stackinator Brenton Wiernik

mutate`:=`和mutate之间的tidyeval差异`=`

  •  3
  • stackinator Brenton Wiernik  · 技术社区  · 7 年前

    尽管这两个代码块使用不同的等号,其中一个是 := 另一个是 = . 哪个是正确的,为什么?我认为蒂迪瓦尔是必需的 当使用dplyr函数时,但很奇怪 =

    1.

    library(tidyverse)
    set.seed(1)
    graph.data <- tibble(cal.date = as.Date(40100:40129, origin = "1899-12-30"), 
                         random_num = rnorm(30, 8, 5))
    
    child_function <- function(df, variable, hor.line = 6) {  
      variable <- enquo(variable)
      df <- mutate(df, mutation := 2 * !! variable, horizontal.line := hor.line)
      df
    }
    
    child_function(graph.data, variable = random_num, hor.line=8)
    

    2.

    library(tidyverse)
    set.seed(1)
    graph.data <- tibble(cal.date = as.Date(40100:40129, origin = "1899-12-30"), 
                         random_num = rnorm(30, 8, 5))
    
    child_function <- function(df, variable, hor.line = 6) {  
      variable <- enquo(variable)
      df <- mutate(df, mutation = 2 * !! variable, horizontal.line = hor.line)
      df
    }
    
    child_function(graph.data, variable = random_num, hor.line=8)
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   arg0naut91    7 年前

    没有义务将 := 那样的话。

    child_function <- function(df, variable, hor.line = 6, mt_name = "mutation") {  
    
      variable <- enquo(variable)
    
      df <- mutate(df, !! mt_name := 2 * !! variable, horizontal.line = hor.line)
    
    }
    
        2
  •  4
  •   Jon Spring    7 年前

    这个 := 运算符的目的是允许您在方程式的LHS(左侧)上动态设置变量的名称,您在这里没有这样做。

    := 如果您想控制“变异”变量的名称,这将非常有用。

    https://dplyr.tidyverse.org/articles/programming.html#setting-variable-names

        3
  •  2
  •   dww Jarretinha    7 年前

    有点难以追踪,但从 ?quasiquotation

    运算符的别名为=。您可以使用它来提供名称,例如a:=b是