将函数的参数名称转换为字符串

时间:2020-07-24 12:27:45

标签: r

我已经开发了一个函数,该函数将获取文件列表并进行一些统计测试,并生成一个excel文件。在函数的最后一行(返回对象)中,我希望函数将返回一个与输入文件名相同名称的excel文件。在我的示例中,它将给出list_file.xlsx。如果我输入另一个文件,例如tslist_file,它应该自动返回tslist_file.xlsx。该功能正常工作。建议我如何对函数的最后一行进行编码,以便对其进行概括。

 newey<-function(list_files){
tsmom<-do.call(cbind,lapply(list_files,function(x) read_excel(x)[,2]))
tsmom<-xts(tsmom[,1:5],order.by = seq(as.Date("2005-02-01"),length=183,by="months")-1)
names(tsmom)<-c("tsmom121","tsmom123","tsmom126","tsmom129","tsmom1212")
## newey west
newey_west<-function(x){
  model<-lm(x~1)
  newey_west<-coeftest(model,vcov=NeweyWest(model,verbose=T))
  newey_west[c(1,3,4)]
}

## running newey west 
cs_nw_full<-do.call(cbind,lapply(tsmom,newey_west))
library(gtools)
p_values<-cs_nw_full[3,]
cs_nw_full[2,]<-paste0(cs_nw_full[2,],stars.pval(p_values))
write.xlsx(cs_nw_full,"list_file.xlsx")
}

1 个答案:

答案 0 :(得分:3)

尝试:

write.xlsx(cs_nw_full, paste0(eval(substitute(list_files)), ".xlsx"))

编辑: @jeetkamal是绝对正确的-您需要使用

write.xlsx(cs_nw_full, paste0(deparse(substitute(list_files)), ".xlsx")) 

这里。

我为这个错误表示歉意。 eval仅在list_files为文件名,而不是列表对象。