我一直在读一本关于特征工程的书,一段代码有一个我不明白的三重感叹号:
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)
Run Code Online (Sandbox Code Playgroud)
VC_preds 是一个包含连续预测变量名称的向量。我理解除!!!标记外的所有代码。一个!应该是一个否定,但它是什么意思!!!?
提供的任何帮助将不胜感激。谢谢你。
问候,
亚历克西斯
Ron*_*hah 10
!!! 通常用于评估表达式列表。
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
Run Code Online (Sandbox Code Playgroud)
如果VC_preds是您示例中的向量,也!!应该可以正常工作。
mtcars %>% select(!!VC_preds) %>% head
Run Code Online (Sandbox Code Playgroud)
帮助页面?"!!!"给出了一个更好的例子来理解差异。
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
Run Code Online (Sandbox Code Playgroud)