在R中,为何dplyr里`.`在`%>%`可用但在原生`|>`报错?
R原生管道
|>与dplyr管道%>%的差异说明 这不是新特性或突发问题,而是两种管道的参数传递设计规则不同:
1. 原生管道|>报错的原因
原生管道|>的核心规则是:自动将左侧对象作为右侧函数的第一个位置参数传入,不需要手动使用.指代。如果强行写.,R会把它当作普通变量去查找,而当前环境中不存在名为.的对象,因此触发object '.' not found错误。
你的代码用原生管道的正确写法应该是:
df |> filter(col2 == "b")
这段代码等价于filter(df, col2 == "b"),原生管道会自动把df传入filter的第一个参数位。
2. dplyr管道%>%正常工作的原因
%>%的规则更灵活:
- 如果手动写了
.,会将左侧对象替换到.的位置 - 如果没写
.,才默认将左侧对象作为函数的第一个参数传入
所以df %>% filter(., col2 == "b")会被解析为filter(df, col2 == "b"),.被替换成df,因此能正常执行。
3. 是否需要换回%>%?
不需要强制换回,根据使用习惯选择即可:
- 若喜欢简洁写法,原生管道
|>足够满足绝大多数数据处理场景,只要记住不用手动写. - 若需要更复杂的参数传递(比如把左侧对象放到函数的非第一个参数位),或者习惯用
.显式指代,继续使用%>%完全没问题
内容的提问来源于stack exchange,提问作者seansteele
相关产品推荐
相关产品推荐

