2016-03-29 1 views
3

Abhängig von einer Bedingung, muss ich wählen zwischen dplyr :: n und einer beliebigen Funktion (sagen wir zum Beispiel eine Funktion, die 2 zurückgibt, welches Argument auch immer gegeben ist).Warum die Zuweisung von dplyrs n() - Funktion macht es nicht ausführbar innerhalb zusammenfassen und mutieren?

Wenn ich Folgendes tun:

new_n <- dplyr::n 
new_n <- ifelse(is.null(k), new_n, my_new_n) 
data <- data %>% group_by_(z) %>% mutate_(n = new_n) 

Wenn zum Beispiel dplyr :: n zugewiesen wird ich den Fehler new_n

Error: This function should not be called directly 

, während ich es erwartet hatte, normal zu arbeiten, wie es wäre, Wenn ich geschrieben hätte

data <- data %>% group_by_(z) %>% mutate_(n = n()) 

Warum passiert das? Gibt es eine Arbeit? Grundsätzlich muss ich der Variablen n einen anderen Wert zuweisen, abhängig von k, aber ich kann den Teil des Codes, an dem die Mutation ausgeführt wird, aufgrund der Projektanforderungen nicht ändern.

EDIT: hinzugefügt einfaches Beispiel. Zum Beispiel, wenn Sie versuchen,

if (require("nycflights13")) { 
carriers <- group_by(flights, carrier) 
summarise(carriers, n()) 
mutate(carriers, n = n()) 
filter(carriers, n() < 100) 
} 

alles funktioniert gut, aber wenn Sie

new_n <- n 
summarise(carriers, new_n()) 

der Code nicht ausgeführt werden versuchen zu laufen arbeiten und Sie werden die Fehler oben, obwohl bekommen, was Ich habe gerade n zu new_n zugewiesen.

+1

wo ist 'data' verwenden? – akrun

+0

@akrun Ich habe keine Daten hinzugefügt, aber Sie können versuchen, eine "andere Version" meines Problems mit dem Beispiel im Abschnitt "n help" auszuführen. Wenn Sie new_n <- n definieren und dann das Beispiel mit new_n() anstelle von n() ausführen, erhalten Sie denselben Fehler und dasselbe Problem, das ich zu erklären versuche. – mickkk

+0

@akrun Ich habe ein funktionierendes Beispiel hinzugefügt – mickkk

Antwort

3

Mit mutate() Sie n() verwenden, aber mit mutate_() verwenden Sie ~n()

Also entweder

data %>% group_by(z) %>% mutate(n = n()) 

oder

data %>% group_by_(~z) %>% mutate_(n = ~n())