【发布时间】:2020-05-28 01:51:55
【问题描述】:
我是R新手。所以当我阅读一些R代码时,我无法理解该符号的含义,例如代码dataset %>% rename(!!vars)中的!!。
有人可以帮我吗?谢谢。
【问题讨论】:
我是R新手。所以当我阅读一些R代码时,我无法理解该符号的含义,例如代码dataset %>% rename(!!vars)中的!!。
有人可以帮我吗?谢谢。
【问题讨论】:
rlang 包中的 bang bang 运算符 !! 强制对对象进行早期评估。在tidyverse 系列包中,它用于在代码管道中启用变量替换。
aVariable <- sym("mpg")
library(dplyr)
mtcars %>% group_by(am) %>%
summarise(mean = mean(!!aVariable))
...和输出:
# A tibble: 2 x 2
am mean
* <dbl> <dbl>
1 0 17.1
2 1 24.4
>
有关强制函数的更多详细信息,请阅读rlang nse-force。
【讨论】:
tidyverse 系列包的挑战之一是,在基本 R 中很容易的一些任务在 tidyverse 中更复杂,尤其是对于初学者。 Norman Matloff 在他的文章Tidyverse Skeptic 中谈到了这一点。
Stataq,
对于新手来说,你已经进入了一些深水区。 !! 是非标准评估 (NSE) 的一部分。这是一个高级主题,在 Hadley Wickham 的 Advanced R 的 MetaProgramming 部分中进行了介绍:https://adv-r.hadley.nz/metaprogramming.html
除非您通过其他计算机语言熟悉 NSE,否则您会发现它的学习曲线非常陡峭。有没有什么问题你现在解决不了,除非你懂!!?
【讨论】: