3

関数内からfilterandを使用したい 。関数がなければ、次のように機能します。 summarisedplyr

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

以前にも同様の質問があったことは承知しています。また、 page1page2などの関連リンクも確認しました。しかし、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 
4

1 に答える 1