web-dev-qa-db-fra.com

dplyr: "Erreur dans n (): la fonction ne doit pas être appelée directement"

J'essaie de reproduire l'un des exemples du paquet dplyr mais ce message d'erreur. Je m'attends à voir une nouvelle colonne n produite avec la fréquence de chaque combinaison. Quelqu'un peut-il me dire ce qui me manque? J'ai vérifié trois fois que le paquet est chargé. Merci pour l'aide, comme toujours.

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

Erreur dans n(): cette fonction ne doit pas être appelée directement

93

Je suppose que vous avez dplyr et plyr chargés dans la même session. dplyr n'est pas plyr. ddply n'est pas une fonction du package dplyr.

dplyr et plyr ont tous deux les fonctions summarise/summarize.

Regardez les résultats de conflicts() pour voir les objets masqués.

117
mnel

Comme mentionné dans la réponse précédente, vous pouvez avoir un conflit entre plyr et dplyr. Vous pouvez exécuter cette commande pour décharger le paquet plyr.

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

Ensuite, vous pouvez continuer comme prévu.

library(dplyr) 
...
summarise(n = n()) 
38
user2487691

Pour éviter les confusions avec les fonctions de masquage, il est clair d'utiliser la spécification "package :: function", comme dans l'exemple ci-dessous:

delay <- dplyr::summarise(by_tailnum, 
  count = n(), 
  dist = mean(distance, na.rm = TRUE), 
  delay = mean(arr_delay, na.rm = TRUE))
26
user1257894

Dans un autre cas, cette erreur s'est produite dans le code suivant.

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

Il peut être résolu comme suit.

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
8
Keiku

pour moi, la solution était detach() function J'ai utilisé cette fonction

0
camilo lopez

Problème similaire rencontré lors de l’exécution du code conformément au blog mentionné, puis exécution de la solution en mode détaché ("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 running detach, lorsque le code ci-dessus a été réexécuté, il a bien fonctionné, bien que le message d’avertissement ait été reçu, comme indiqué ci-dessous, ne sachant pas si le plyr a été déchargé ou non.

Message d’avertissement: l’espace de noms "plyr" ne peut pas être déchargé: l’espace de noms "plyr" est importé par "reshape2", "balances", "balai", "ggplot2" et ne peut donc pas être déchargé.

0
CuriousCoder