dplyr: "błąd w n (): Funkcja nie powinna być wywoływana bezpośrednio"

Próbuję odtworzyć jeden z przykładów w pakiecie dplyr, ale ten Komunikat o błędzie. Spodziewam się, aby zobaczyć nową kolumnę N produkowane z częstotliwością każdej kombinacji. Czy ktoś może mi powiedzieć, co mi umyka? Trzykrotnie sprawdzałem, czy paczka jest załadowana. Dzięki za pomoc, jak zawsze.

 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())

Błąd w n (): Ta funkcja nie powinna być wywoływana bezpośrednio

Author: eli-k, 2014-04-02

6 answers

Zakładam, że masz dplyr i plyr załadowane w tej samej sesji. dplyr nie jest plyr. ddply nie jest funkcją w pakiecie dplyr.

Zarówno dplyr jak i plyr mają funkcje summarise/summarize.

Spójrz na wyniki conflicts(), aby zobaczyć zamaskowane obiekty.

 104
Author: mnel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-27 00:44:15

Jak wspomniano w poprzedniej odpowiedzi, możesz mieć konflikt między plyr i dplyr. Możesz uruchomić to polecenie, aby rozładować pakiet plyr.

detach("package:plyr", unload=TRUE) 

Wtedy możesz kontynuować zgodnie z oczekiwaniami.

library(dplyr) 
...
summarise(n = n()) 
 28
Author: user2487691,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-29 19:48:23

Aby uniknąć nieporozumień z funkcjami maskującymi, jasne jest użycie specyfikacji "package:: function", jak w przykładzie poniżej:

delay <- dplyr::summarise(by_tailnum, 
  count = n(), 
  dist = mean(distance, na.rm = TRUE), 
  delay = mean(arr_delay, na.rm = TRUE))
 23
Author: user1257894,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-15 02:37:46

W innym przypadku błąd ten wystąpił w poniższym kodzie.

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

Można to rozwiązać w następujący sposób.

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
 7
Author: Keiku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-10 10:57:01

Wystąpił podobny problem podczas wykonywania kodu jak na wspomnianym blogu, a następnie uruchom rozwiązanie w detach ("package:plyr", unload=TRUE)

Blog: 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 uruchomiony detach, gdy powyższy kod został ponownie uruchomiony, działał dobrze, chociaż otrzymał komunikat ostrzegawczy jak poniżej, Nie wiem, czy plyr został rozładowany, czy nie.A jak poprawnie wykonuje się kod ?

Komunikat ostrzegawczy: przestrzeń nazw 'plyr' nie może być unloaded: przestrzeń nazw 'plyr' jest importowana przez 'reshape2',' scales',' broom',' ggplot2 ' więc nie można jej rozładować

 0
Author: CuriousCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-20 22:39:18

Dla mnie rozwiązaniem była detach() funkcja wykorzystałem tę funkcję w dół pakietu

 0
Author: camilo lopez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-27 19:21:32