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

Mic*_*use 95 r function conflicting-libraries plyr dplyr

我试图重现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())
Run Code Online (Sandbox Code Playgroud)

n()出错:不应直接调用此函数

mne*_*nel 119

我认为你有dplyrplyr加载在同一个会话中.dplyr不是plyr.ddply不是dplyr包中的功能.

无论dplyrplyr具备的功能summarise/ summarize.

查看conflicts()看到蒙版对象的结果.

  • 解决方案是确保首先加载`plyr` (31认同)
  • 正如@ User1257894说,使用'summarize`与包装,像这样`dplyr ::总结(计数= N())`. (16认同)

小智 39

如前面的答案所述,你可能在plyr和dplyr之间存在冲突.您可以运行此命令来卸载plyr包.

detach("package:plyr", unload=TRUE) 
Run Code Online (Sandbox Code Playgroud)

然后你可以按预期继续.

library(dplyr) 
...
summarise(n = n()) 
Run Code Online (Sandbox Code Playgroud)


use*_*894 26

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

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


Kei*_*iku 8

在另一种情况下,此错误发生在以下代码中.

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
Run Code Online (Sandbox Code Playgroud)

它可以解决如下.

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
Run Code Online (Sandbox Code Playgroud)