【问题标题】:What does dataset %>% rename(!!vars) mean in R?数据集 %>% rename(!!vars) 在 R 中是什么意思?
【发布时间】:2020-05-28 01:51:55
【问题描述】:

我是R新手。所以当我阅读一些R代码时,我无法理解该符号的含义,例如代码dataset %>% rename(!!vars)中的!!。 有人可以帮我吗?谢谢。

【问题讨论】:

  • 最简单的起点是?`!!`
  • 有大量关于tidyeval 的文档以及dplyr!! 的使用。
  • 试过了吗? “!!”它真的向我展示了答案!超级。

标签: r dplyr rlang


【解决方案1】:

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

【讨论】:

  • 非常感谢您回答我的问题。我害怕我会问一个太愚蠢的问题。 :P
  • @Stataq - 不客气。 tidyverse 系列包的挑战之一是,在基本 R 中很容易的一些任务在 tidyverse 中更复杂,尤其是对于初学者。 Norman Matloff 在他的文章Tidyverse Skeptic 中谈到了这一点。
【解决方案2】:

Stataq,

对于新手来说,你已经进入了一些深水区。 !! 是非标准评估 (NSE) 的一部分。这是一个高级主题,在 Hadley Wickham 的 Advanced RMetaProgramming 部分中进行了介绍:https://adv-r.hadley.nz/metaprogramming.html

除非您通过其他计算机语言熟悉 NSE,否则您会发现它的学习曲线非常陡峭。有没有什么问题你现在解决不了,除非你懂!!

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2022-12-08
    • 2013-11-02
    • 2014-01-31
    • 2011-08-12
    • 2017-06-11
    相关资源
    最近更新 更多