Ich möchte filter
und summarise
von dplyr
innerhalb meiner Funktion verwenden. Ohne eine Funktion wie folgt funktioniert:Wie verwendet man dplyr-Verben innerhalb einer Funktionsdefinition in r?
library(dplyr)
> Orange %>%
+ filter(Tree==1) %>%
+ summarise(age_max = max(age))
age_max
1 1582
Ich möchte das gleiche in einer Funktion zu tun, aber folgende fehlschlägt:
## Function definition:
df.maker <- function(df, plant, Age){
require(dplyr)
dfo <- df %>%
filter(plant==1) %>%
summarise(age_max = max(Age))
return(dfo)
}
## Use:
> df.maker(Orange, Tree, age)
Rerun with Debug
Error in as.lazy_dots(list(...)) : object 'Tree' not found
Ich weiß, dass ähnliche Fragen, bevor gestellt wurden. Ich habe auch einige relevante Links wie page1 und page2 durchgegangen. Aber ich kann die Konzepte von NSE und SE nicht vollständig erfassen. Ich versuchte folgendes:
df.maker <- function(df, plant, Age){
require(dplyr)
dfo <- df %>%
filter_(plant==1) %>%
summarise_(age_max = ~max(Age))
return(dfo)
}
Aber erhalten Sie den gleichen Fehler. Bitte hilf mir zu verstehen, was vor sich geht. Und wie kann ich meine Funktion korrekt erstellen? Vielen Dank!
EDIT:
ich auch versucht, folgende:
df.maker <- function(df, plant, Age){
require(dplyr)
dfo <- df %>%
#filter_(plant==1) %>%
summarise_(age_max = lazyeval::interp(~max(x),
x = as.name(Age)))
return(dfo)
}
> df.maker(Orange, Tree, age)
Error in as.name(Age) : object 'age' not found
Does [diese] (http://stackoverflow.com/questions/40017629/using-dplyr-within-a-function-non-standard-evaluation/40018601#40018601) beantworte deine Frage? – Axeman
@Axeman, ich habe das versucht, wie in meinem Schnitt gezeigt. Aber es funktioniert immer noch nicht. Ich denke, es hat etwas mit Umwelt zu tun. –