0

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

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

但这会返回警告:

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

我收到错误消息:

错误:并非所有函数都允许在阶跃函数选择器中使用(例如all_of)。见?选择。

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

有任何想法吗?非常感谢!

4

1 回答 1

2

如果您使用 quasiquotation,您将不会收到警告:

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),两列都将被删除。

于 2020-05-14T05:38:31.467 回答