在函数

时间:2018-02-21 21:00:04

标签: r tidyverse

有效的代码:

scale_this <- function(x){
  (x - mean(x, na.rm=TRUE)) / sd(x, na.rm=TRUE)
}

get_the_boxes <- function(df,y,val1,provider_id){

  temp <- df %>%
    group_by_("MPIN") %>%
    # mutate(y = scale_this(y),PAID_DATE_GRP = scale_this(PAID_DATE_GRP))
    mutate(y = scale_this(mbr_cnt_log))

  return(temp)
}

编辑: 想要添加我调用函数的方式:

my_data  <- get_the_boxes(new2,"mbr_cnt_log",1,"mpin")

但是,我想通过参数“y”传递列名“mbr_cnt_log”。我已经看到类似问题的答案(this是一个很好的例子),但它们对我来说失败了(用户错误,毫无疑问)。

只显示带有更改的行,这是我尝试的内容并返回错误:

变化:

mutate(y = scale_this(deparse(substitute(y))))

错误:

Error in mutate_impl(.data, dots) : 
  Evaluation error: non-numeric argument to binary operator.

变化:

mutate(y = scale_this(df[[y]]))

错误:

Error in mutate_impl(.data, dots) : 
  Column `y` must be length 24 (the group size) or one, not 0

变化:

mutate(y = scale_this(df[,y]))

错误:

 Error in mutate_impl(.data, dots) : 
  Evaluation error: Column `"mbr_cnt_log"` not found.

2 个答案:

答案 0 :(得分:2)

使用最新版本的| UIkit.notification("booked"); = "\n" | $("#total").html(" = escape_javascript(render "total") |"); = "\n" | $("#total_#{@id}").html(" = escape_javascript(render "total", order:@order) |"); ,您可以使用dplyr和bang-bang enquo运算符来捕获和扩展符号到dplyr表达式

!!

答案 1 :(得分:0)

这就是我的工作:

get_the_boxes <- function(df,y,val1,provider_id){
  y<-enquo(y)

  temp <- df %>%
    group_by_("MPIN") %>%
    # mutate(y = scale_this(y),PAID_DATE_GRP = scale_this(PAID_DATE_GRP))
    mutate(y = scale_this(!!y))

  return(temp)
}

my_data <- get_the_boxes(new2,mbr_cnt_log,1,"mpin")

这基本上是MrFlick写的,但有点不同。我找到了this来帮忙。