2 votes

Convertir le nom de l'argument d'une fonction en chaîne de caractères

J'ai développé une fonction qui prend une liste de fichiers, effectue quelques tests statistiques et génère un fichier Excel. Dans la dernière ligne de la fonction (return object), je veux que la fonction renvoie un fichier Excel avec les mêmes noms que ceux des fichiers d'entrée. Dans mon exemple, cela donnera list_file.xlsx. Si j'entre un autre fichier, disons fichier_liste, il devrait automatiquement retourner fichier_liste.xlsx. La fonction fonctionne correctement. Suggérez-moi comment coder la dernière ligne de la fonction pour que je puisse la généraliser.

 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")
}

3voto

user12728748 Points 6262

Essayez :

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

Edit : @jeetkamal a tout à fait raison - vous devez utiliser

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

ici.

Je m'excuse pour cette erreur. eval ne fonctionnerait que si list_files était par exemple le nom d'un fichier, et non un objet liste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X