R-dplyr合并到用户定义的函数中 [英] R - dplyr merge in user-defined function

查看:90
本文介绍了R-dplyr合并到用户定义的函数中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图创建如下的合并函数:


定义的函数


  merge_tables< -函数(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)
}

使用以下数据和代码运行时出现错误:


模拟数据


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


使用已定义函数的代码


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


错误消息


 错误:出现意外的 =: 
" outputdata<-inputdata1%>%
full_join(inputdata2,by = c((rlang :: quo_text(byvar1))="
>
> return(outputdata)
错误:未找到对象'outputdata'
>}
错误:}''

我想知道是否有人可以看到任何明显的问题吗?...非常感谢。

解决方案

这应该起作用:

  merge_tables<-函数(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)

}

返回:

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

testing_merge

ID letter1 letter2
1 1或
2 2 xq
3 3< NA> b


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.

解决方案

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

这篇关于R-dplyr合并到用户定义的函数中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆