组合管道和 magrittr 点 (.) 占位符
Combining pipes and the magrittr dot (.) placeholder
我是 R 的新手,我想了解 %>%
运算符和“.
”(点)占位符的用法。作为一个简单的例子,下面的代码有效
library(magrittr)
library(ensurer)
ensure_data.frame <- ensures_that(is.data.frame(.))
data.frame(x = 5) %>% ensure_data.frame
但是下面的代码失败了
ensure_data.frame <- ensures_that(. %>% is.data.frame)
data.frame(x = 5) %>% ensure_data.frame
我现在将占位符传送到 is.data.frame 方法中。
我猜是我对点占位符 limitations/interpretation 的理解滞后了,但谁能澄清一下?
这是问题所在:
. = data.frame(x = 5)
a = data.frame(x = 5)
a %>% is.data.frame
#[1] TRUE
. %>% is.data.frame
#Functional sequence with the following components:
#
# 1. is.data.frame(.)
#
#Use 'functions' to extract the individual functions.
在我看来像是一个错误,但 dplyr
专家可以插话。
表达式中的一个简单解决方法是 .[] %>% is.data.frame
.
"problem"是magrittr有匿名函数的简写形式:
. %>% is.data.frame
与
大致相同
function(.) is.data.frame(.)
换句话说,当点位于(最左侧)左侧时,管道具有特殊行为。
您可以通过几种方式避免这种行为,例如
(.) %>% is.data.frame
或 LHS 与 .
不同的任何其他方式
在这个特定的例子中,这可能看起来是不受欢迎的行为,但通常在这样的例子中,实际上不需要传递第一个表达式,所以 is.data.frame(.)
和 . %>% is.data.frame
一样富有表现力,并且
例如
data %>%
some_action %>%
lapply(. %>% some_other_action %>% final_action)
可以说比
更清晰
data %>%
some_action %>%
lapply(function(.) final_action(some_other_action(.)))
我是 R 的新手,我想了解 %>%
运算符和“.
”(点)占位符的用法。作为一个简单的例子,下面的代码有效
library(magrittr)
library(ensurer)
ensure_data.frame <- ensures_that(is.data.frame(.))
data.frame(x = 5) %>% ensure_data.frame
但是下面的代码失败了
ensure_data.frame <- ensures_that(. %>% is.data.frame)
data.frame(x = 5) %>% ensure_data.frame
我现在将占位符传送到 is.data.frame 方法中。
我猜是我对点占位符 limitations/interpretation 的理解滞后了,但谁能澄清一下?
这是问题所在:
. = data.frame(x = 5)
a = data.frame(x = 5)
a %>% is.data.frame
#[1] TRUE
. %>% is.data.frame
#Functional sequence with the following components:
#
# 1. is.data.frame(.)
#
#Use 'functions' to extract the individual functions.
在我看来像是一个错误,但 dplyr
专家可以插话。
表达式中的一个简单解决方法是 .[] %>% is.data.frame
.
"problem"是magrittr有匿名函数的简写形式:
. %>% is.data.frame
与
大致相同function(.) is.data.frame(.)
换句话说,当点位于(最左侧)左侧时,管道具有特殊行为。
您可以通过几种方式避免这种行为,例如
(.) %>% is.data.frame
或 LHS 与 .
不同的任何其他方式
在这个特定的例子中,这可能看起来是不受欢迎的行为,但通常在这样的例子中,实际上不需要传递第一个表达式,所以 is.data.frame(.)
和 . %>% is.data.frame
一样富有表现力,并且
例如
data %>%
some_action %>%
lapply(. %>% some_other_action %>% final_action)
可以说比
更清晰data %>%
some_action %>%
lapply(function(.) final_action(some_other_action(.)))