R 如何将变量名传递给函数中的参数

R 如何将变量名传递给函数中的参数,r,R,我是R的新用户,我想为不同的变量调用一段代码,我想这样做: myfunc<- function(dat, groupvar, interestvar){ a<- dat%>% group_by(groupvar) %>% summarize(m=mean(interestvar)) ..... other codes .... return(a) } myfunc(data=newdata, groupvar=vari

我是
R
的新用户,我想为不同的变量调用一段代码,我想这样做:

   myfunc<- function(dat, groupvar, interestvar){
      a<- dat%>% group_by(groupvar) %>% summarize(m=mean(interestvar))
         ..... other codes ....
      return(a)   }

myfunc(data=newdata, groupvar=variable1, interestvar=variable3)
myfunc(data=newdata, groupvar=variable2, interestvar=varaible4)
myfunc%汇总(m=平均值(利息)
..... 其他代码。。。。
返回(a)}
myfunc(数据=新数据,groupvar=变量1,interestvar=变量3)
myfunc(数据=新数据,组变量=变量2,兴趣向量=变量4)

这里的
variable1vari
都是
newdata
中的变量。似乎如果我调用
intrestvar=newdata$varaible3
,该部分就可以工作了。但是,我调用
groupvar
的方法仍然不能告诉该组所使用的函数是由
variable1
完成的。如何使其工作?

您可以使用
rlang
中的curly-curly运算符(
{{}}
)在函数中传递不带引号的变量

library(dplyr)
library(rlang)

myfunc<- function(dat, groupvar, interestvar){
  a<- dat%>% group_by({{groupvar}}) %>% summarize(m=mean({{interestvar}}))
  return(a)   
}

myfunc(dat =mtcars, groupvar=cyl, interestvar=mpg)
#   cyl        m
#  <dbl>    <dbl>
#1     4 26.66364
#2     6 19.74286
#3     8 15.1    

myfunc(dat = mtcars, groupvar=am, interestvar=disp)
#     am        m
#  <dbl>    <dbl>
#1     0 290.3789
#2     1 143.5308
库(dplyr)
图书馆(rlang)
myfunc%汇总(m=平均值({{interestvar}}))
报税表(a)
}
myfunc(dat=mtcars,groupvar=cyl,interestvar=mpg)
#共青团
#      
#1     4 26.66364
#2     6 19.74286
#3     8 15.1    
myfunc(dat=mtcars,groupvar=am,interestvar=disp)
#我是m
#      
#1     0 290.3789
#2     1 143.5308

您可以使用
rlang
中的curly-curly运算符(
{{}}
)在函数中传递无引号的变量

library(dplyr)
library(rlang)

myfunc<- function(dat, groupvar, interestvar){
  a<- dat%>% group_by({{groupvar}}) %>% summarize(m=mean({{interestvar}}))
  return(a)   
}

myfunc(dat =mtcars, groupvar=cyl, interestvar=mpg)
#   cyl        m
#  <dbl>    <dbl>
#1     4 26.66364
#2     6 19.74286
#3     8 15.1    

myfunc(dat = mtcars, groupvar=am, interestvar=disp)
#     am        m
#  <dbl>    <dbl>
#1     0 290.3789
#2     1 143.5308
库(dplyr)
图书馆(rlang)
myfunc%汇总(m=平均值({{interestvar}}))
报税表(a)
}
myfunc(dat=mtcars,groupvar=cyl,interestvar=mpg)
#共青团
#      
#1     4 26.66364
#2     6 19.74286
#3     8 15.1    
myfunc(dat=mtcars,groupvar=am,interestvar=disp)
#我是m
#      
#1     0 290.3789
#2     1 143.5308

在函数中使用
{{}
a%groupu by({{groupvar})%%>%summary(m=mean({{interestvar}}))
非常感谢。它可以工作]在函数中使用
{{}
,即
a%groupu by({{groupvar})%%>%summary(m=mean({{interestvar}}))
非常感谢。它工作]谢谢。花括号起作用。但如果我再多加几行,我会有更多的问题:a%group_by(groupvar)%>%summary(q3=分位数({{interestVar1},probs=0.75,type=1),q1=分位数({{interestVar1},probs=0.25,type=1))%>%mutate(iqr=(q3-q1),lowerbound=q1-1.5*iqr,上限=q3+1.5*iqr)>%select(year\u month\u sort\u key,lowerbound,upperbound)}它给了我一个错误,说在iqr中找不到groupvar1。另外,我不能调用iqr(或者如果我使用return(dat2)我也不能这么说。很抱歉问了一些基本的问题。也许,作为一个新问题问这个问题更好,因为这个信息在原始问题中没有共享。我发布了一个新问题,题为“如何在Rstudio中像在SAS宏中那样将代码块写入函数?”正如你所建议的。谢谢谢谢,所以你可以通过点击投票按钮旁边的复选标记来接受这个答案,这样它就可以被标记为已解决。@lydia请在提出新问题之前接受答案。阅读谢谢。花括号很有效。但是如果我再添加几行,我会得到更多的问题:a%group\U by(groupvar)%%>%总结(q3=quantile({{{interestVar1}},probs=0.75,type=1),q1=quantile({{interestVar1},probs=0.25,type=1))%%>%变异(iqr=(q3-q1),lowerbound=q1-1.5*iqr,上限=q3+1.5*iqr)%%>%选择(年月排序键,下限,上限)}它给了我一个错误,说在iqr中找不到groupvar1。另外,我不能调用iqr,(或者如果我使用return(dat2),我也不能调用它。很抱歉问了一些基本的问题。也许,最好作为一个新问题来问,因为原始问题中没有共享此信息。我已经发布了一个标题为的新问题“如何将代码块写入Rstudio中的函数,如SAS宏中的函数”。感谢您,您可以通过单击投票按钮旁边的复选标记接受此答案,以便将其标记为已解决。@lydia在提出新问题之前请接受答案。阅读