dplyr: "ошибка в n (): функция не должна вызываться напрямую"
Я пытаюсь воспроизвести один из примеров в пакет 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 ответов
Я полагаю, у вас есть dplyr
и plyr
загружено в том же сеансе. dplyr
не plyr
. ddply
не является функцией в .
и 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 ("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
)
Post работает отсоединение, когда выше код был перезапущен, он работал нормально, хотя получил предупреждающее сообщение, как показано ниже, не уверен, был ли plyr выгружен или нет.И как правильно выполняется код ?
предупреждение сообщение: пространство имен plyr не может быть выгружено: plyr пространства имен ‘’ ввозится ‘reshape2’, ‘весы’, ‘метла’, ‘ggplot2’ так не может быть выгружен