tidyverse上下文中的〜操作符是什么意思?

问题描述 投票:0回答:2

假设下面的数据集:

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运算符是什么意思?
r tidyverse
2个回答
0
投票

[通过多种方法可以在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仅是一个示例,您可以使用它来应用更复杂的功能。


0
投票

通常,这是编写匿名函数的简便方法。

map_dbl(HEIGHT, ~ sum(.x, 5))

与]相同>

map_dbl(HEIGHT, function(.x){sum(.x, 5))

在其他情况下,它还有其他含义。例如,在R>提示符下,键入

? case_when 

以查看其如何使用~

© www.soinside.com 2019 - 2024. All rights reserved.