mutate`:=`和mutate`=`之间的区别

时间:2018-11-12 18:14:08

标签: r function dplyr

这两个代码块都可以使用,即使它们使用不同的等号,一个使用:=,另一个使用=。哪个正确,为什么?我以为使用dplyr函数时需要:=来进行tidyeval,但是足够奇怪的=在我的mutate调用中也可以正常工作。

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 个答案:

答案 0 :(得分:4)

:=运算符的目的是使您可以在方程式的LHS(左侧)上动态设置变量的名称,您无需在此处进行设置。

在许多情况下,包括这一情况,我们只关心操纵RHS。如果您想控制“变异”变量的名称,:=将派上用场。

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

答案 1 :(得分:2)

在这种情况下,没有义务放置:=

当您要执行以下操作时,它变得必不可少:

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 :(得分:2)

很难追踪,但是从<?php $sql = "SELECT * FROM payment WHERE client_id = 99"; $result = $connect->query($sql); $data = $result->fetch_array(); $mnthId = $data['month_id']; if ($mnthId = 11) { echo "November Paid"; } else { echo "Unpaid"; } ?>

  

不幸的是,R对于所支持的表达式类型非常严格   在=的LHS上。这就是为什么我们变得更加灵活:=   运算符=的别名。您可以使用它来提供名称,例如a:= b是   相当于a = b。由于其语法更灵活,您可以取消引用   在LHS上:

相关问题