R语言中如何将多条命令改写为单个%>%管道命令?
R 管道运算符代码改写方案
完全可以将你的代码合并为1条管道命令,具体实现如下:
实现代码
方案1:基础R配合管道(无需额外加载dplyr)
需先加载magrittr包获取%>%运算符:
library(magrittr) b2m <- (b$bdi.2m - b$bdi.pre) %>% as.vector(mode = "any") %>% .[!is.na(.)] %>% `^`(2) %>% sum(.) / length(.) # 输出结果 b2m
方案2:dplyr风格写法(可读性更强)
利用na.omit()和mean()简化逻辑,等效于你的原生计算逻辑:
library(dplyr) b2m <- b %>% mutate(diff = bdi.2m - bdi.pre) %>% pull(diff) %>% as.vector(mode = "any") %>% na.omit() %>% `^`(2) %>% mean() # 输出结果 b2m
报错原因说明
你之前接管道报索引错误,是因为没有用.指代管道上一步的输出结果:
- 管道每一步的输出默认传入下一个函数的第一个参数,做索引、运算符这类非函数调用操作时,需要用
.显式声明前一步结果的位置 - 如果直接在管道中写
[!is.na(b2m)],调用的是还未经过前序处理的旧b2m变量,自然会出现索引匹配错误
结果验证
用你提供的示例数据运行上述代码,返回结果为180.6667,和你原分段代码的运行结果完全一致。
内容的提问来源于stack exchange,提问作者Dave Twickenham
相关产品推荐
相关产品推荐

