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