管道列名称到断言

Pipe column names to assertive

我正在尝试使用 assertive 包进行 运行 次测试,我想使用管道传递列名。

这是一个简单的例子:

library(tidyverse)
library(assertive)
df <- tibble(Name = c("DONALD", "JAIME", "LINDA"))

这有效但不使用管道:

assertive::assert_all_are_true(df$Name == str_to_upper(df$Name))

这使用管道,但不起作用:

df %>% assertive::assert_all_are_true(Name == str_to_upper(Name))
#> Error in match.arg(severity): object 'Name' not found

如何将列名通过管道传递给 assertive

我们可以使用with

library(dplyr)
df %>% 
     with(., assertive::assert_all_are_true(Name == str_to_upper(Name)))

或使用 .$

提取列
df %>%
    {assertive::assert_all_are_true(.$Name == str_to_upper(.$Name))}

|> 来自 R 4.1.0

df |> 
    {\(x) assertive::assert_all_are_true(x$Name == str_to_upper(x$Name))}()