Dplyr: "Ошибка в n(): функция не должна вызываться напрямую"
Я пытаюсь воспроизвести один из примеров в пакете dplyr, но это сообщение об ошибке. Я ожидаю увидеть новый столбец n, полученный с частотой каждой комбинации. Может ли кто-нибудь сказать мне, что мне не хватает? Я triple проверил, что пакет загружен. Спасибо за помощь, как всегда.
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())
#Error in n() : This function should not be called directly
Ответы
Ответ 1
Я предполагаю, что вы загрузили dplyr
и plyr
в тот же сеанс. dplyr
не plyr
. ddply
не является функцией в пакете dplyr
.
Оба dplyr
и plyr
имеют функции summarise
/summarize
.
Посмотрите на результаты conflicts()
, чтобы увидеть маскированные объекты.
Ответ 2
Как уже упоминалось в предыдущем ответе, у вас может быть конфликт между plyr и dplyr. Вы можете запустить эту команду, чтобы выгрузить пакет plyr.
detach("package:plyr", unload=TRUE)
Затем вы можете продолжать, как ожидалось.
library(dplyr)
...
summarise(n = n())
Ответ 3
Чтобы избежать путаницы с функциями маскирования, ясно использовать спецификацию "package:: function", например, пример:
delay <- dplyr::summarise(by_tailnum,
count = n(),
dist = mean(distance, na.rm = TRUE),
delay = mean(arr_delay, na.rm = TRUE))
Ответ 4
В другом случае эта ошибка произошла в следующем коде.
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