tidymodels 秘诀:使用存储在向量中的 all_of 到 select 变量

tidymodels recipe: Using all_of to select variables stored in a vector

我想对 tidymodels 配方包中的各种步骤函数使用带有列名的向量。我的直觉是简单地使用(prepjuice 只是在这里用于说明):

library(tidymodels)
library(modeldata)
data(biomass)

remove_vector <- c("oxygen","nitrogen")

test_recipe <- recipe(HHV ~ .,data = biomass) %>%
  step_rm(remove_vector)

test_recipe %>% 
  prep %>% 
  juice %>% 
  head

但是这个returns警告:

Note: Using an external vector in selections is ambiguous.
i Use `all_of(remove_vector)` instead of `remove_vector` to silence this message.
i See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.

这当然让我很担心(我想确保我在编码时不会遇到错误消息),但我仍然得到了我想要的结果。

但是,当我按照错误消息进行操作并将以下内容与 all_of 一起使用时:

test_recipe <- recipe(HHV ~ .,data = biomass) %>%
  step_rm(all_of(remove_vector))

test_recipe %>% 
  prep %>% 
  juice %>% 
  head

我收到错误消息:

Error: Not all functions are allowed in step function selectors (e.g. all_of). See ?selections.

?selections 中,我似乎没有找到对我遇到的确切(看似简单)问题的参考。

有什么想法吗? 非常感谢!

如果您使用准引号,您将不会收到警告:

library(tidymodels)
library(modeldata)
data(biomass)

remove_vector <- c("oxygen", "nitrogen")

test_recipe <- recipe(HHV ~ .,data = biomass) %>%
  step_rm(!!!syms(remove_vector))

test_recipe %>% 
  prep %>% 
  juice %>% 
  head

有关警告的更多信息。可能会发生您将 vector 命名为与您的列名之一相同的情况。例如:

oxygen <- c("oxygen","nitrogen")

test_recipe <- recipe(HHV ~ .,data = biomass) %>%
  step_rm(oxygen)

这只会删除 oxygen 列。但是,如果您使用 !!!syms(oxygen),则两列都将被删除。