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