假设下面的数据集:
df_1 <- structure(list(var_1 = c(42.0324095338583, 86.828490421176, 42.4499513395131,
87.8373390808702, 69.4962524808943), var_2 = c(52.6775231584907,
60.7429852150381, 23.1536079756916, 89.0404256992042, 40.8967914432287
), var_3 = c(53.2254045270383, 99.7671523876488, 55.2181884087622,
97.3904117196798, 63.9911676943302), var_4 = c(77.9183112829924,
53.8156733289361, 71.4701929315925, 70.3330857120454, 24.3069419451058
), var_5 = c(48.498358130455, 86.109549254179, 45.0998894125223,
61.7115858010948, 39.3580442667007), var_6 = c(43.4050587192178,
32.7955435216427, 46.6158176586032, 43.4641770273447, 49.2192720063031
), groups = structure(c(1L, 2L, 2L, 2L, 2L), .Label = c("1",
"2", "3"), class = "factor")), row.names = c(NA, 5L), class = "data.frame")
以及以下功能:
library(tidyverse)
library(magrittr)
df_1 %>%
filter(
across(.cols = is.numeric, .fns = ~ is_weakly_greater_than(e1 = ., e2 = 40))
)
# var_1 var_2 var_3 var_4 var_5 var_6 groups
#1 42.03241 52.67752 53.22540 77.91831 48.49836 43.40506 1
#2 87.83734 89.04043 97.39041 70.33309 61.71159 43.46418 2
它正常工作。但是,只需删除~
运算符:
df_1 %>%
filter(
across(.cols = is.numeric, .fns = is_weakly_greater_than(e1 = ., e2 = 40))
)
错误:
across()
只能在dplyr动词内使用。
~
代码中使用tidyverse
运算符是什么意思?[通过多种方法可以在dplyr
动词中应用功能。
按原样使用功能:
library(dplyr)
mtcars %>% mutate_if(is.numeric, sqrt)
使用公式界面,即~
mtcars %>% mutate_if(is.numeric, ~sqrt(.))
使用匿名功能-
mtcars %>% mutate_if(is.numeric, function(x) sqrt(x))
[使用~
时,将通知您将使用该函数的公式界面。
很显然,sqrt
仅是一个示例,您可以使用它来应用更复杂的功能。
通常,这是编写匿名函数的简便方法。
map_dbl(HEIGHT, ~ sum(.x, 5))
与]相同>
map_dbl(HEIGHT, function(.x){sum(.x, 5))
在其他情况下,它还有其他含义。例如,在
R>
提示符下,键入
? case_when
以查看其如何使用
~
。