在 r 中使用 unique() 函数中的管道不起作用



我在使用具有独特功能的管道运算符 (%>%) 时遇到了一些麻烦。

df = data.frame(
a = c(1,2,3,1),
b = 'a')
unique(df$a) # no problem here
df %>% unique(.$a) # not working here
# I got "Error: argument 'incomparables != FALSE' is not used (yet)"

知道吗?

正如其他答案提到的:df %>% unique(.$a)等同于df %>% unique(.,.$a)

要强制点明确,您可以执行以下操作:

df %>% {unique(.$a)}
# [1] 1 2 3

magrittr的另一种选择

df %$% unique(a)
# [1] 1 2 3

或者可能陈述显而易见的事情:

df$a %>% unique()
# [1] 1 2 3

正在发生的事情是,默认情况下,%>%获取左侧的对象并将其馈送到函数的第一个参数中,然后将按提供的方式输入其他参数。下面是一个示例:

df = data.frame(
a = c(1,2,3,1),
b = 'a')
MyFun<-function(x,y=FALSE){
return(match.call())
}
> df %>% MyFun(.$a)
MyFun(x = ., y = .$a)

正在发生的事情是,%>%dfx相匹配,.$ay相匹配。

因此,unique您的代码被解释为:

unique(x=df, incomparables=.$a)

这解释了错误。 对于您的情况,您需要在运行唯一之前拉出a。如果你想保持%>%你可以使用df %>% .$a %>% unique()但显然还有很多其他方法可以做到这一点。

最新更新