Тройной восклицательный знак на R - PullRequest
1 голос
/ 13 апреля 2020

Я читал книгу по проектированию объектов, и фрагмент кода имеет тройной восклицательный знак, которого я не понимаю:

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 - это вектор, содержащий имена переменных непрерывного предсказатели. Я понимаю весь код, кроме знака !!!. Один ! считается отрицанием, но что это значит !!!?

Любая предоставленная помощь будет принята с благодарностью. Спасибо.

С уважением,

Алексис

1 Ответ

3 голосов
/ 13 апреля 2020

!!! обычно используется для оценки списка выражений.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...