関数内からfilter
andを使用したい 。関数がなければ、次のように機能します。 summarise
dplyr
library(dplyr)
> Orange %>%
+ filter(Tree==1) %>%
+ summarise(age_max = max(age))
age_max
1 1582
関数内で同じことをしたいのですが、以下は失敗します:
## 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
以前にも同様の質問があったことは承知しています。また、 page1やpage2などの関連リンクも確認しました。しかし、NSE と SE の概念を完全に理解することはできません。私は次のことを試しました:
df.maker <- function(df, plant, Age){
require(dplyr)
dfo <- df %>%
filter_(plant==1) %>%
summarise_(age_max = ~max(Age))
return(dfo)
}
しかし、同じエラーが発生します。何が起こっているのか理解するのを手伝ってください。また、関数を正しく作成するにはどうすればよいですか? ありがとう!
編集:
私も次のことを試しました:
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