这两个代码块即使使用不同的等号也能工作,一个使用 := ,另一个使用 = 。哪个是正确的,为什么?我认为 tidyeval 在使用 dplyr 函数时需要 :=,但奇怪的是 = 在我的 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)

最佳答案

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

当您想要执行以下操作时,它变得必须:

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)

}

关于r - mutate `:=` 和 mutate `=` 之间的 tidyeval 差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53267860/

10-12 20:00