dplyr: “Fehler in n (): function sollte nicht direkt aufgerufen werden”

Ich versuche, eines der Beispiele im dplyr-Paket aber diese Fehlermeldung zu reproduzieren. Ich erwarte eine neue Spalte mit der Häufigkeit jeder Kombination. Kann mir jemand sagen, was ich vermisse? Ich habe geprüft, ob das Paket geladen ist. Danke für die Hilfe, wie immer.

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

Fehler in n (): Diese function sollte nicht direkt aufgerufen werden

Ich dplyr , Sie haben dplyr und plyr in derselben Sitzung geladen. dplyr ist nicht plyr . ddply ist keine function im dplyr Paket.

Sowohl dplyr als auch plyr haben die functionen summarise / summarize .

Betrachten Sie die Ergebnisse von conflicts() , um maskierte Objekte zu sehen.

Wie in der vorherigen Antwort erwähnt, haben Sie möglicherweise einen Konflikt zwischen plyr und dplyr. Sie können diesen Befehl ausführen, um das plyr-Paket zu entladen.

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

Dann können Sie wie erwartet fortfahren.

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

Um Verwechslungen mit Maskierungsfunktionen zu vermeiden, ist es klar, die Spezifikation “package :: function” zu verwenden, wie im folgenden Beispiel:

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

In einem anderen Fall trat dieser Fehler im folgenden Code auf.

 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 

Es kann wie folgt getriggers werden.

 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 #    # 1 1 1 1 # 2 2 2 4 # 3 3 3 9 

Konfrontiert ähnliches Problem bei der Ausführung von Code wie erwähnt Blog und führen Sie dann Lösung in detach (“Paket: plyr”, entladen = 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, wenn obiger Code erneut ausgeführt wurde, funktionierte es gut, obwohl eine Warnmeldung wie unten erhalten wurde, nicht sicher, ob plyr entladen wurde oder nicht. Und wie wird der Code richtig ausgeführt?

Warnmeldung: Der Namespace ‘plyr’ kann nicht entladen werden: Der Namespace ‘plyr’ wird mit ‘reshape2’, ‘scales’, ‘broom’, ‘ggplot2’ importiert und kann daher nicht entladen werden