了解 R 中 across 中的警告信息

Understand the warning message in across in R

这道题是为了加深对 R 函数 Across & Which 的理解。我 运行 此代码并收到消息。我想了解

a) 好的和坏的练习有什么区别

b) where 函数在一般情况下和在此用例中如何准确工作

library(tidyverse)
iris %>% mutate(across(is.character,as.factor)) %>% str()


Warning message:
Problem with `mutate()` input `..1`.
i Predicate functions must be wrapped in `where()`.

  # Bad
  data %>% select(is.character)

  # Good
  data %>% select(where(is.character))

i Please update your code.

使用where和不使用区别不大。它只是显示一个建议更好语法的警告。基本上 where 采用谓词函数并将其应用于数据集的每个变量(列)。然后它 returns 函数 returns TRUE 的每个变量。以下示例摘自 where:

的文档
iris %>% select(where(is.numeric))
# or an anonymous function
iris %>% select(where(function(x) is.numeric(x)))
# or a purrr style formula as a shortcut for creating a function on the spot
iris %>% select(where(~ is.numeric(.x)))

或者你也可以有两个条件使用 shorthand &&:

# The following code selects are numeric variables whose means are greater thatn 3.5
iris %>% select(where(~ is.numeric(.x) && mean(.x) > 3.5))

您可以将 select(where(is.character)) 用于 across 函数的 .cols 参数,然后在所选列上应用 .fns 参数中的函数。 有关详细信息,您始终可以参考文档,这些文档是了解这些材料的更多信息的最佳来源。