【问题标题】:Triple exclamation marks on RR上的三个感叹号
【发布时间】:2020-07-25 13:23:53
【问题描述】:

我一直在看一本关于特征工程的书,有一段代码有三个感叹号,我看不懂:

vc_pred <- 
  recipe(Stroke ~ ., data = stroke_train %>% dplyr::select(Stroke, !!!VC_preds)) %>% 
  step_YeoJohnson(all_predictors()) %>% 
  prep(stroke_train %>% dplyr::select(Stroke, !!!VC_preds)) %>% 
  juice() %>% 
  gather(Predictor, value, -Stroke)

VC_preds 是一个包含连续预测变量名称的向量。除了!!! 标记外,我了解所有代码。一个!应该是否定的,但是!!!是什么意思?

我们将不胜感激提供的任何帮助。谢谢。

问候,

亚历克西斯

【问题讨论】:

    标签: r


    【解决方案1】:

    !!! 通常用于计算表达式列表。

    library(dplyr)
    library(rlang)
    
    VC_preds <- c('mpg', 'cyl')
    mtcars %>% select(!!!VC_preds) %>% head
    
    #                   mpg Cyl
    #Mazda RX4         21.0   6
    #Mazda RX4 Wag     21.0   6
    #Datsun 710        22.8   4
    #Hornet 4 Drive    21.4   6
    #Hornet Sportabout 18.7   8
    #Valiant           18.1   6
    

    如果VC_preds 是您示例中的向量,则!! 也应该可以工作。

    mtcars %>% select(!!VC_preds) %>% head
    

    ?"!!!" 的帮助页面提供了一个更好的示例来理解差异。

    vars <- syms(c("height", "mass"))
    vars
    #[[1]]
    #height
    
    #[[2]]
    #mass
    
    starwars %>% select(!!!vars)
    # A tibble: 87 x 2
    #   height  mass
    #    <int> <dbl>
    # 1    172    77
    # 2    167    75
    # 3     96    32
    # 4    202   136
    # 5    150    49
    # 6    178   120
    # 7    165    75
    # 8     97    32
    # 9    183    84
    #10    182    77
    # … with 77 more rows
    

    【讨论】:

    • 你好@Ronak Shah,你是对的,!!!是大爆炸算子!非常感谢!现在我必须以一种简单的方式理解符号的含义。
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多