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在提出新问题之前请接受答案。阅读