Finally! TidyEval is getting easier,这使我在magrittr .
代词和rlang代词.data
之间进行了代词测试。
library(tidyverse)
identical(head(iris, 2) %>% mutate(col = .$Species),
head(iris, 2) %>% mutate(col = .data$Species))
#> [1] TRUE
看看。它们完全相同。除非他们可能不是。来自上面链接的文章:
。 magrittr的代词在这里不合适,因为 代表整个数据帧,而.data代表子集 用于当前组。
有什么区别?您可能在想,“只需在粘贴的上方阅读该句子”即可。不幸的是,如果您能提供的话,我需要更多的解释。某些示例将是不错的。我想到尝试的第一件事(上面的代码)将两个代词显示为“相同”。我在这里感觉到矛盾。谢谢。
答案 0 :(得分:1)
希望这将说明您的问题中的报价:
``` r
library(dplyr)
iris[48:52,] %>%
group_by(Species) %>%
transmute(
Sepal.Length,
col0 = mean(Sepal.Length),
col1 = mean(.$Sepal.Length),
col2 = mean(.data$Sepal.Length))
#> # A tibble: 5 x 5
#> # Groups: Species [2]
#> Species Sepal.Length col0 col1 col2
#> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 setosa 4.6 4.97 5.66 4.97
#> 2 setosa 5.3 4.97 5.66 4.97
#> 3 setosa 5 4.97 5.66 4.97
#> 4 versicolor 7 6.7 5.66 6.7
#> 5 versicolor 6.4 6.7 5.66 6.7
```
我认为有些人喜欢用它来传递参数而没有!!sym(foo)
体操:
col <- "Species"
iris[48:52,] %>%
mutate(
SPECIES1 = toupper(!!sym(col)),
SPECIES2 = toupper(.data[[col]]))
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species SPECIES1
#> 1 4.6 3.2 1.4 0.2 setosa SETOSA
#> 2 5.3 3.7 1.5 0.2 setosa SETOSA
#> 3 5.0 3.3 1.4 0.2 setosa SETOSA
#> 4 7.0 3.2 4.7 1.4 versicolor VERSICOLOR
#> 5 6.4 3.2 4.5 1.5 versicolor VERSICOLOR
#> SPECIES2
#> 1 SETOSA
#> 2 SETOSA
#> 3 SETOSA
#> 4 VERSICOLOR
#> 5 VERSICOLOR
对于什么值,我必须总共使用.data
3次,而当我这样做时,可能会有更好的方法了。我认为其中一两个与ggplot2
一起使用。
您几乎可以忽略.data
的存在,但仍然可以成为非常体面的tidyverse忍者。