Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的波浪形点(~)_R_Dplyr - Fatal编程技术网

R中的波浪形点(~)

R中的波浪形点(~),r,dplyr,R,Dplyr,谁能解释R中的波浪点(~)吗?我已经看过一些关于它的帖子了。我知道tilde用于公式,指定自变量和因变量。我知道点是用来表示所有其他变量的。更具体地说,有人能解释一下这个例子中的波浪点吗 x <- sample(10) x %>% detect(~. > 5) x% 检测(~.>5) 谢谢正如Flick先生所指出的,这是两个独立的运营商。它们一起提供了一种特殊的机制,允许tidyverse包动态构建。这在中得到了最好的描述。具体来说, 如果使用公式,例如~.x+2,则将

谁能解释R中的波浪点(~)吗?我已经看过一些关于它的帖子了。我知道tilde用于公式,指定自变量和因变量。我知道点是用来表示所有其他变量的。更具体地说,有人能解释一下这个例子中的波浪点吗

x <- sample(10)
x %>%
  detect(~. > 5)
x%
检测(~.>5)

谢谢

正如Flick先生所指出的,这是两个独立的运营商。它们一起提供了一种特殊的机制,允许tidyverse包动态构建。这在中得到了最好的描述。具体来说,

如果使用公式,例如~.x+2,则将其转换为函数。有三种方法可以引用这些参数:

  • 对于单参数函数,请使用

  • 对于双参数函数,请使用.x和.y

  • 有关更多参数,请使用..1、..2、..3等

以您的例子:

purrr::as_mapper( ~. > 5 )
# <lambda>
# function (..., .x = ..1, .y = ..2, . = ..1)
# . > 5
# attr(,"class")
# [1] "rlang_lambda_function"
purrr::as_mapper(~.>5)
# 
#函数(…,.x=…1,.y=…2,.=…1)
# . > 5.
#属性(,“类”)
#[1]“rlang_lambda_函数”
创建一个函数,该函数返回一个逻辑值,指示函数的参数是否大于5
purrr::detect()
,然后使用它遍历输入向量
x
。最终结果是满足“大于5”约束的
x
的第一个元素


正如Konrad所指出的,这种机制是tidyverse特有的,一般不起作用。在tidyverse之外,此语法的行为在a.

+1中解释。值得强调的是,这一提及一般不起作用,它只适用于特定的函数(不同于匿名函数,匿名函数在任何地方都有效)。谢谢,@RLave。做了一些更精确的修改。可能值得花些时间阅读答案中提到的R手册页面。这里解释得很清楚,重要的是要知道tilde-dot不是复合运算符或任何东西。它们是两个不同的东西。您还可以执行
检测(~5<)
。他们每个人都在做不同的事情。您正在创建一个公式(使用
~
),该公式使用一个特殊变量(名为
),某些函数将该变量解释为创建lambda函数(但这仅适用于“tidyverse”函数)。