我试图重现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()中的错误:不应直接调用此函数
答案 0 :(得分:115)
我假设您在同一会话中加载了dplyr
和plyr
。 dplyr
不是plyr
。 ddply
不是dplyr
包中的函数。
dplyr
和plyr
都有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()
函数,我利用该函数下载包