Подтвердить что ты не робот

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
4b9b3361

Ответ 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