Ich möchte invoke_map
verwenden, um eine Liste von Funktionen aufzurufen. Ich habe eine Reihe von Variablennamen, die ich als Argumente für jede der Funktionen verwenden möchte. Letztendlich werden die Variablennamen mit group_by
verwendet.Verwenden Sie invoke_map, um Variablennamen als Argumente zu übergeben
Hier ist ein Beispiel:
library(dplyr)
library(purrr)
first_fun <- function(...){
by_group = quos(...)
mtcars %>%
group_by(!!!by_group) %>%
count()
}
second_fun <- function(...){
by_group = quos(...)
mtcars %>%
group_by(!!!by_group) %>%
summarise(avg_wt = mean(wt))
}
first_fun(mpg, cyl) # works
second_fun(mpg, cyl) # works
both_funs <- list(first_fun, second_fun)
both_funs %>%
invoke_map(mpg, cyl) # What do I do here?
ich verschiedene Versuche versucht haben, die Variablennamen in Anführungszeichen zu setzen, enquo
, verwenden vars
Bezugs .data$mpg
, etc, aber ich bin Messerstecherei im Dunkeln ein wenig.
[Diese Frage] (https://stackoverflow.com/questions/43415475/how- to-parametrize-function-calls-in-dplyr-0-7/43416705 # 43416705) zeigt, wie man das Problem anwendet, indem man die Funktionen ändert, um Gruppierungsspalten von einem benannten Parameter anstelle von Punkten zu erhalten, was eine Teillösung ist. Ich bin immer noch an der Frage interessiert, wie man Variablennamen durch Punkte mit Hilfe von invoke übergibt, obwohl die Antwort vielleicht ist, Variablennamen nicht aus Punkten zu bekommen. –
Man könnte denken, dass das Argument '.env' hier nützlich sein könnte, aber' invoke_map (first_fun, Liste (liste (mpg, cyl)), .env = as.environment (mtcars)) 'funktioniert auch nicht. – Axeman