如何在R语言中通过管道%>%调用which()函数?
用管道符
%>%实现which(test == 0)的正确写法 首先定义向量:
test <- c(1,2,0,5,0)
原生写法which(test == 0)可得到结果[1] 3 5,但你尝试的三种管道写法均报错——原因是管道符默认会把左侧对象作为右侧函数的第一个参数传入,而which(. == 0)这类写法会被解析为把test传给which的第一个参数,同时将. ==0当作第二个参数(但which的第二个参数是arr.ind,要求为布尔值,类型不匹配),因此触发错误。
以下是几种正确的管道实现方式:
使用大括号包裹表达式,改变管道默认的参数传递逻辑:
test %>% {which(. == 0)}大括号内的代码会将
.视为管道传入的test向量,直接执行which(. == 0),和原生写法逻辑完全一致。拆分步骤,先生成逻辑向量再传入
which:test %>% {. == 0} %>% which()第一步对
test做等于0的判断得到逻辑向量,再将该向量传给which函数。简洁链式写法(兼容base管道与
magrittr管道):test %>% equals(0) %>% which()这里
equals(0)等价于. == 0,更贴合管道的链式调用风格。
内容的提问来源于stack exchange,提问作者braun_tube
相关产品推荐
相关产品推荐

