96

我正在尝试重现 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())

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

4

6 回答 6

120

我想你已经在同一个会话中加载了dplyr。不是。不是包中的函数。plyrdplyrplyrddplydplyr

两者dplyr都有plyr功能summarise/ summarize

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

于 2014-04-02T03:59:17.090 回答
39

如上一个答案所述,您可能在 plyr 和 dplyr 之间存在冲突。您可以运行此命令来卸载 plyr 包。

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

然后您可以按预期继续。

library(dplyr) 
...
summarise(n = n()) 
于 2015-07-29T19:48:23.303 回答
26

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

delay <- dplyr::summarise(by_tailnum, 
  count = n(), 
  dist = mean(distance, na.rm = TRUE), 
  delay = mean(arr_delay, na.rm = TRUE))
于 2015-10-28T08:57:46.217 回答
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

可以如下解决。

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
于 2017-03-10T10:50:53.290 回答
0

根据提到的博客执行代码时遇到类似问题,然后在 detach("package:plyr", unload=TRUE) 中运行解决方案

博客:https ://www.analyticsvidhya.com/blog/2017/09/comparative-stock-analysis/

Master_Data_AutoCorrelations<-Master_Data_lags %>%
  gather(key = "lag", value = "lag_value", -c(Stock,Date, Close)) %>%
  mutate(lag = str_sub(lag, start = 5) %>% as.numeric) %>%
  group_by(Stock, lag) %>%
  summarize(
    cor = cor(x = Close, y = lag_value, use = "pairwise.complete.obs"),
    cutoff_upper = 2/(n())^0.5,
    cutoff_lower = -2/(n())^0.5
  )

运行分离后,当上述代码重新运行时,虽然收到如下警告消息,但它工作正常,不确定 plyr 是否已卸载。代码如何正确执行?

警告消息:“plyr”命名空间无法卸载:命名空间“plyr”由“reshape2”、“scales”、“broom”、“ggplot2”导入,因此无法卸载

于 2018-07-20T22:39:18.887 回答
0

对我来说,解决方案是detach()我利用该功能下降包的功能

于 2018-09-27T18:58:00.573 回答