当定义参数时,我有一个可以正常工作的函数:
fav_fun<-function(dataset,levelname,demo_var){
demo_var<- enquo(demo_var)
levelname<-enquo(levelname)
test1<-dataset %>% group_by(!!levelname, !!demo_var)%>%filter(status=="Complete")%>% summarise_at(questions,per_qid)
test2<-melt(test1)
test2$newvar<-do.call(paste,c(test2[c("variable","Age")],sep="_"))
test2<-na.omit(test2)
test2<-test2%>% select(c(-2,-3))
total<-RawDataSplit%>% group_by(!!levelname)%>%filter(status=="Complete") %>% summarise(N=n())
test2
}
但是我还有另一个函数,其中我定义了该函数的参数,然后该函数无法找到那些参数。 另一个功能是:
levelfun<-function(m){
levelname<-names(mastercodes)[[m]]
level_filter_data<-RawDataSplit%>% filter(unitlevel>m)
if(top_level_inclusion==TRUE){
top_data<-RawDataSplit%>% filter(unitlevel==1)
final_data<-rbind(top_data,level_filter_data)
}
if(top_level_inclusion==FALSE){
final_data<-level_filter_data
}
code_match<-match(names(mastercodes),names(RawDataSplit))
k=code_match[m]
allemp_rep<-fav_fun(final_data,levelname,demo_var
allemp_rep<-cbind(datalinetype=1,allemp_rep)
if(k<ncol(final_data)-1){
directrep_data<-subset(final_data,is.na(final_data[,(k+2)]))
directrep<-fav_fun(directrep_data,levelname,demo_var
directrep<-cbind(datalinetype=2,directrep)}
if(k==ncol(final_data)-1){
directrep_data<-subset(final_data,!is.na(final_data[,(k+1)]))
directrep<-fav_fun(directrep_data,levelname,demo_var)
directrep<-cbind(datalinetype=2,directrep)}
ifelse (nrow(directrep_data)==0, final<-allemp_rep, final<-rbind(allemp_rep,directrep))
final<-final%>% mutate(identifier=as.factor(identifier))
final
}
我在levelfun中传递了levelname和demo_var,我尝试使用noquote和as.names,因为引号存在问题,但是它没有将它们作为文本从数据中提取为列。
有什么想法可以在levelfun中传递这两个参数levelname和demo_var,以便它们自动作为数据集的列,并且fav_fun函数可以正常运行吗?