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

5ssjco0h  于 2023-02-01  发布在  其他
关注(0)|答案(2)|浏览(188)

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

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)"

你知道吗?

dsf9zpds

dsf9zpds1#

其他答复提到: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
ds97pgxw

ds97pgxw2#

%>%默认情况下获取左手的对象并将其输入函数的第一个参数,然后再输入其他参数,下面是一个例子:

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)
这就解释了这个错误。对于您的情况,您需要在运行unique之前取出a。如果您想继续使用%>%,您可以使用df %>% .$a %>% unique(),但显然有很多其他方法可以做到这一点。

相关问题