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

时间:2014-04-02 03:44:49

标签: r function plyr dplyr conflicting-libraries

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

6 个答案:

答案 0 :(得分:115)

我假设您在同一会话中加载了dplyrplyrdplyr不是plyrddply不是dplyr包中的函数。

dplyrplyr都有summarise / summarize函数。

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

答案 1 :(得分:35)

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

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

然后你可以按预期继续。

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

答案 2 :(得分:26)

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

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

答案 3 :(得分:8)

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

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

可以解决如下。

$watch('myVal', function() {
    if($scope.myVal == true) {
        alert('yes');
    } else {
        alert('no');
    }
});

答案 4 :(得分: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”导入的,因此无法卸载

答案 5 :(得分:0)

对我来说,解决方案是detach()函数,我利用该函数下载包