R:在使用dplyr的函数中,如何检查以确保在继续之前没有引用参数名?

R:在使用dplyr的函数中,如何检查以确保在继续之前没有引用参数名?,r,function,dplyr,quosure,R,Function,Dplyr,Quosure,长话短说:我有一个函数,其中参数grouping.var=record\u id可以工作,但是grouping.var=“record\u id”将返回不正确的数据,并且不会出错。因此,我希望我的函数检查传递给参数的名称是否不在引号中 长话短说:我经常有数据显示,每个研究对象都会进行多次访问,每次访问对应一行。有些数据在访问期间不会发生变化(如种族或性别),只显示在一行上。我的函数将把变量中的数据复制到该主题的所有行中 mash <- function(data, variables, g

长话短说:我有一个函数,其中参数
grouping.var=record\u id
可以工作,但是
grouping.var=“record\u id”
将返回不正确的数据,并且不会出错。因此,我希望我的函数检查传递给参数的名称是否不在引号中

长话短说:我经常有数据显示,每个研究对象都会进行多次访问,每次访问对应一行。有些数据在访问期间不会发生变化(如种族或性别),只显示在一行上。我的函数将把变量中的数据复制到该主题的所有行中

mash <- function(data, variables, grouping.var){
   data <- data %>%
     dplyr::arrange(!!rlang::enquo(grouping.var))%>%
     dplyr::group_by(!!rlang::enquo(grouping.var))%>%
     dplyr::mutate_at(dplyr::vars(!!!variables),
                function(x) zoo::na.locf(x[order(x)], na.rm = F))%>%
     dplyr::ungroup()
   return(data)
}
df <- tibble(record_id = c('A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'),
             x = c(NA, 1, NA, 2, NA, NA, NA, 3),
             y = c(1, NA, NA, NA, 2, 3, NA, NA))
df
df.2 <- mash(df, c('x','y'), grouping.var = record_id) #This works fine.
df.2
mash%
dplyr::group_by(!!rlang::enquo(grouping.var))%>%
dplyr::mutate_at(dplyr::vars(!!!变量),
函数(x)zoo::na.locf(x[顺序(x)],na.rm=F))%>%
dplyr::ungroup()
返回(数据)
}

df您可以使用
.data[[foo]]
函数,首先输入变量

mash%
dplyr::arrange(.data[[grouping.var]])%>%
dplyr::分组依据(.data[[grouping.var]])%>%
dplyr::mutate_at(dplyr::vars(!!!变量),
函数(x)zoo::na.locf(x[顺序(x)],na.rm=F))%>%
dplyr::ungroup()
}

太棒了!现在,这两种方式都起作用了。谢谢
df.3 <- mash(df, c('x','y'), grouping.var = 'record_id') #does not work
mash <- function(data, variables, grouping.var){

grouping.var = enquo(grouping.var)

 data %>%
  dplyr::arrange(.data[[grouping.var]]) %>%
  dplyr::group_by(.data[[grouping.var]]) %>%
  dplyr::mutate_at(dplyr::vars(!!!variables),
                 function(x) zoo::na.locf(x[order(x)], na.rm = F))%>%
  dplyr::ungroup()

}