我对R很新,我试图理解%>%
运算符和" .
"(点)占位符的用法.作为一个简单示例,以下代码有效
library(magrittr)
library(ensurer)
ensure_data.frame <- ensures_that(is.data.frame(.))
data.frame(x = 5) %>% ensure_data.frame
Run Code Online (Sandbox Code Playgroud)
但是,以下代码失败
ensure_data.frame <- ensures_that(. %>% is.data.frame)
data.frame(x = 5) %>% ensure_data.frame
Run Code Online (Sandbox Code Playgroud)
我现在将占位符管道到is.data.frame方法中.
我猜这是我对点占位符的限制/解释的理解是滞后的,但有人可以澄清一下吗?
"问题"是magrittr对匿名函数有一个简写符号:
. %>% is.data.frame
Run Code Online (Sandbox Code Playgroud)
大致相同
function(.) is.data.frame(.)
Run Code Online (Sandbox Code Playgroud)
换句话说,当点是(最左侧)左侧时,管道具有特殊行为.
您可以通过几种方式逃避行为,例如
(.) %>% is.data.frame
Run Code Online (Sandbox Code Playgroud)
或者LHS不相同的任何其他方式.
在这个特定的例子中,这可能看起来是不受欢迎的行为,但通常在这样的例子中,实际上不需要管道第一个表达式,因此is.data.frame(.)
具有表现力. %>% is.data.frame
,以及像
data %>%
some_action %>%
lapply(. %>% some_other_action %>% final_action)
Run Code Online (Sandbox Code Playgroud)
可以说比清楚明白
data %>%
some_action %>%
lapply(function(.) final_action(some_other_action(.)))
Run Code Online (Sandbox Code Playgroud)