R - dplyr merge in user-defined function [duplicate]

元气小坏坏 提交于 2020-06-28 04:41:41

问题


I am trying to create a merge function as follows:

Defined function

merge_tables <- function(inputdata1, inputdata2, byvar1, byvar2) {
  
byvar1 <- enquo(byvar1)
byvar2 <- enquo(byvar2)
  
  outputdata <- inputdata1 %>% 
    full_join(inputdata2, by = c(rlang::quo_text(byvar1) = rlang::quo_text(byvar2)))
  
  return(outputdata)
}

I am getting an error when I run using the following data and code:

Mock data

set.seed(1)
data1<- data.frame(ID = sample(1:2), letter1 = sample(letters, 2, replace = TRUE))
data2<- data.frame(PatID = sample(1:3), letter2 = sample(letters, 3, replace = TRUE))

Code using the defined function

testing_merge <- merge_tables(data1, data2, ID, PatID)

Error message

Error: unexpected '=' in:
"  outputdata <- inputdata1 %>% 
    full_join(inputdata2, by = c( (rlang::quo_text(byvar1)) ="
>   
>   return(outputdata)
Error: object 'outputdata' not found
> }
Error: unexpected '}' in "}"

I wonder if anyone can see any glaring issues?... Many thanks.


回答1:


This should work:

merge_tables <- function(inputdata1, inputdata2, byvar1, byvar2) {

  byvar1 <- enquo(byvar1)
  byvar2 <- enquo(byvar2)

  by <- setNames(quo_name(byvar2), quo_name(byvar1))

  outputdata <- full_join(inputdata1, inputdata2, by = by)

  return(outputdata)

}

Returning:

testing_merge <- merge_tables(data1, data2, ID, PatID)

testing_merge

  ID letter1 letter2
1  1       o       r
2  2       x       q
3  3    <NA>       b


来源:https://stackoverflow.com/questions/53101245/r-dplyr-merge-in-user-defined-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!