dplyr:“不应该直接调用n():函数中的错误”

我试图重现dplyr包中的一个例子,但是这个错误信息。 我期待看到每个组合的频率产生一个新的列n。 有人能告诉我我失踪了吗? 我三重检查,包被加载。 感谢您的帮助,一如既往。

library(dplyr) # summarise peels off a single layer of grouping by_vs_am <- group_by(mtcars, vs, am) by_vs <- summarise(by_vs_am, n = n()) #Error in n() : This function should not be called directly 

我认为你在同一个会话中加载了dplyrplyrdplyr不是plyrddply不是dplyr包中的一个函数。

dplyrplyr都有functionsummarise / summarize

看看conflicts()的结果来查看被蒙版的对象。

正如前面的回答所述,plyr和dplyr之间可能会有冲突。 你可以运行这个命令来卸载plyr软件包。

 detach("package:plyr", unload=TRUE) 

那么你可以按预期继续。

 library(dplyr) ... summarise(n = n()) 

为了避免混淆掩码函数,使用“package :: function”规范很明显,如下例所示:

 delay <- dplyr::summarise(by_tailnum, count = n(), dist = mean(distance, na.rm = TRUE), delay = mean(arr_delay, na.rm = TRUE)) 

在另一种情况下,在下面的代码中发生此错误。

 library(dplyr) # dplyr 0.5.0 library(lazyeval) df <- data_frame(group = c(1, 2, 2, 3, 3, 3)) g <- "group" df %>% group_by_(g) %>% summarise_( n = n(), sum = interp(~sum(col, na.rm = TRUE), col = as.name(g)) ) # Error in n() : This function should not be called directly 

它可以解决如下。

 df %>% group_by_(g) %>% summarise_( n = "n()", sum = interp(~sum(col, na.rm = TRUE), col = as.name(g)) ) # A tibble: 3 × 3 # group n sum # <dbl> <int> <dbl> # 1 1 1 1 # 2 2 2 4 # 3 3 3 9 
Interesting Posts