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


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()中的错误:不应直接调用此函数

Answers:


120

我相信你有dplyrplyr在同一个会话加载。dplyr不是plyrddply不是功能dplyr包中。

无论dplyrplyr具备的功能summarise/ summarize

查看的结果conflicts()以查看被遮罩的对象。


31
解决方案是确保您plyr先加载
hadley 2014年

16
就像@ User1257894所说的那样,summarize与包一起使用,就像这样dplyr::summarize(count = n())
拉法·巴拉甘

39

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

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

然后,您可以按预期继续。

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

确实是...摘要之间存在冲突。我也意外地在一个项目中加载plyrdplyr打包了程序,并意识到了这种冲突。很好的同事。
马诺·库玛

26

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

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

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

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”导入,因此无法卸载


0

对我来说,解决方案就是detach()功能,我利用了该功能


您能否阐明“我利用了该功能的精简版”的含义?
匿名

1
抱歉,我使用detach()函数下载了一个软件包,我在dplyr和knitr软件包之间遇到了冲突,然后使用了该函数下载了detach(“ package:knitr”,unload = TRUE)
camilo lopez
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.