%>%
是惰性的,仅在需要时评估管道表达式,而 %!>%
是即刻的,并在每一步评估管道输入。当函数因副作用而被调用时(例如显示消息),这会产生更直观的行为。
请注意,您也可以通过使函数严格化来解决此问题。对函数中的第一个参数调用 force()
以强制顺序求值,即使使用惰性 %>%
管道也是如此。请参阅示例部分。
例子
f <- function(x) {
message("foo")
x
}
g <- function(x) {
message("bar")
x
}
h <- function(x) {
message("baz")
invisible(x)
}
# The following lazy pipe sequence is equivalent to `h(g(f()))`.
# Given R's lazy evaluation behaviour,`f()` and `g()` are lazily
# evaluated when `h()` is already running. This causes the messages
# to appear in reverse order:
NULL %>% f() %>% g() %>% h()
#> baz
#> bar
#> foo
# Use the eager pipe to fix this:
NULL %!>% f() %!>% g() %!>% h()
#> foo
#> bar
#> baz
# Or fix this by calling `force()` on the function arguments
f <- function(x) {
force(x)
message("foo")
x
}
g <- function(x) {
force(x)
message("bar")
x
}
h <- function(x) {
force(x)
message("baz")
invisible(x)
}
# With strict functions, the arguments are evaluated sequentially
NULL %>% f() %>% g() %>% h()
#> foo
#> bar
#> baz
# Instead of forcing, you can also check the type of your functions.
# Type-checking also has the effect of making your function lazy.
相关用法
- R magrittr pipe 管道
- R magrittr exposition 展览管
- R magrittr tee 三通管
- R magrittr compound 分配管道
- R matrix转list用法及代码示例
- R SparkR match用法及代码示例
- R vcov.gam 从 GAM 拟合中提取参数(估计器)协方差矩阵
- R gam.check 拟合 gam 模型的一些诊断
- R as 强制对象属于某个类
- R null.space.dimension TPRS 未惩罚函数空间的基础
- R language-class 表示未评估语言对象的类
- R gam.reparam 寻找平方根惩罚的稳定正交重新参数化。
- R className 类名包含对应的包
- R modelr typical 求典型值
- R extract.lme.cov 从 lme 对象中提取数据协方差矩阵
- R scat 用于重尾数据的 GAM 缩放 t 系列
- R choldrop 删除并排名第一 Cholesky 因子更新
- R smooth.construct.cr.smooth.spec GAM 中的惩罚三次回归样条
- R modelr resample “惰性”重采样。
- R bandchol 带对角矩阵的 Choleski 分解
- R BasicClasses 基本数据类型对应的类
- R gam.side GAM 的可识别性边条件
- R cox.ph 附加 Cox 比例风险模型
- R callGeneric 从方法调用当前通用函数
- R mgcv.parallel mgcv 中的并行计算。
注:本文由纯净天空筛选整理自Stefan Milton Bache等大神的英文原创作品 Eager pipe。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。