各位晚安。为什么 ''r'' 的某些函数不能与管道 ( %>%) 一起使用,就像与 一样unique()?
例如,如果我运行一个名为GOT如下的对象:
GOT %>%
unique(region)
Run Code Online (Sandbox Code Playgroud)
这不会给我结果,但是如果我按照以下方式执行此操作:
unique(GOT$region)
Run Code Online (Sandbox Code Playgroud)
显示结果。select()其他函数(例如or )不会发生这种情况arrange()。这是为了什么?谢谢。
管道运算符将左侧传递到右侧函数的第一个参数(除非另有指定)。从这个意义上说,它适用于所有功能,包括unique.
但是,并非每个函数都像您提到的 dplyr 函数一样工作。select和arrange是 dplyr/(tidyverse) 的一部分,并且,与该(组)包中的许多其他函数一样:它们(1)将第一个参数作为数据帧;(2) 允许您在其他参数中仅通过列名来引用列。
unique来自碱基R,并且它不具有上述两个特征。unique由于is的默认用法unique(x, incomparables = FALSE, ...),您正在执行unique('GOT, incomparables = region, ...),因此列名不会传递到可以理解它的参数上。
如果你确实想使用管道,你可以这样做:
GOT %>% {unique(.$region)}
GOT %>% pull(region) %>% unique()正如@Curt F. 所补充的
GOT %>% with(region) %>% unique()正如@Ric Villalba 所补充的