>我正在尝试重现 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() 中的错误:不应直接调用此函数
我假设您在同一会话中加载了dplyr
和plyr
。 dplyr
不是plyr
. ddply
不是dplyr
包中的函数。
dplyr
和plyr
都具有summarise
/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
在按照提到的博客执行代码然后在 detach 中运行解决方案时遇到类似的问题("包:plyr",卸载=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'、'扫帚'、'ggplot2' 导入,因此无法卸载
对我来说,解决方案是detach()
我使用该函数包的功能