在函数中使用dplyr,非标准求值

在函数中使用dplyr,非标准求值,r,dplyr,nse,R,Dplyr,Nse,我试图改变主意,但没有成功。我想要一个短函数,它返回指定变量集的汇总统计信息(N,mean,sd,median,IQR,min,max) 我的函数的简化版本 my_summarise <- function(df = temp, to.sum = 'eg1', ...){ ## Summarise results <- summarise_(df,

我试图改变主意,但没有成功。我想要一个短函数,它返回指定变量集的汇总统计信息(N,mean,sd,median,IQR,min,max)

我的函数的简化版本

my_summarise <- function(df = temp,
                         to.sum = 'eg1',
                         ...){
    ## Summarise
    results <- summarise_(df,
                          n = ~n(),
                          mean = mean(~to.sum, na.rm = TRUE))
    return(results)
}

my_summary基本思想是,您必须实际构建适当的call-your,最容易使用
lazyeval
包完成

在本例中,您希望以编程方式创建一个类似于
~mean(eg1,na.rm=TRUE)
的调用。这就是为什么:

my_summarise <- function(df = temp,
                         to.sum = 'eg1',
                         ...){
  ## Summarise
  results <- summarise_(df,
                        n = ~n(),
                        mean = lazyeval::interp(~mean(x, na.rm = TRUE),
                                                x = as.name(to.sum)))
  return(results)
}
my_summary谢谢,我(盲目地)尝试用一个tilde启动对
mean()
的调用,但没有发现需要使用lazyeval::interp()。是时候再看一次小插曲了。干杯。相关:
my_summarise <- function(df = temp,
                         group.by = 'group'
                         to.sum = c('eg1', 'eg2'),
                         ...){
    results <- list()
    ## Select columns
    df <- dplyr::select_(df, .dots = c(group.by, to.sum))
    ## Summarise overall
    results$all <- summarise_each(df,
                                  funs(n = ~n(),
                                       mean = mean(~to.sum, na.rm = TRUE)))
    ## Summarise by specified group
    results$by.group <- group_by_(df, ~to.group) %>%
                        summarise_each(df,
                                       funs(n = ~n(),
                                       mean = mean(~to.sum, na.rm = TRUE)))        
    return(results)
}
my_summarise <- function(df = temp,
                         to.sum = 'eg1',
                         ...){
  ## Summarise
  results <- summarise_(df,
                        n = ~n(),
                        mean = lazyeval::interp(~mean(x, na.rm = TRUE),
                                                x = as.name(to.sum)))
  return(results)
}