如何在R的dplyr包中使用管道操作符调用intersect()函数?
解决R中dplyr管道调用intersect()的问题
问题原因
你之前的管道写法报错,是因为管道默认会把左侧的mtcars(一个数据框)直接传给intersect()的第一个参数x,但intersect(x=names(.), y=a)里你试图用names(.)作为x,但管道的默认传递规则会优先把mtcars赋值给x,导致x实际是数据框类型,和y的字符向量类型不匹配,从而报错。
可行解决方案
方案1:用大括号{}改变管道默认行为
大括号可以让你在管道中手动控制参数传递,避免管道自动把左侧对象传给函数的第一个参数:
library(tidyverse) a = c('mpg', 'cyl') mtcars %>% {intersect(names(.), a)}
方案2:先提取列名再传参
先通过管道提取mtcars的列名,得到字符向量后再调用intersect(),这样符合管道的默认传递逻辑:
mtcars %>% names() %>% intersect(a)
两种方法都能得到和intersect(names(mtcars), a)一样的结果:[1] "mpg" "cyl"
内容的提问来源于stack exchange,提问作者zhiwei li
相关产品推荐
相关产品推荐

