2013-01-13 14 views
5

Sto cercando di scrivere una funzione che ha un argomento come di seguito:superamento di un numero con zeri a funzionare

myfunction<-function(id){ 
print(paste(id, ".", "csv", sep="")) 
} 

quando il valore id è così 009, esso stampa come 9.csv non 009 .csv.

ho provato questo:

id<-as.character(id) 

questo non sta funzionando. Eventuali suggerimenti?

risposta

9

Utilizzare ad es. sprintf():

myfunction <- function(id) { 
    sprintf("%03d.csv", id) 
} 

che dà

R> cat(myfunction(9), "\n") 
009.csv 
R> cat(myfunction(199), "\n") 
199.csv 
R> 
4

Anche se già accettato @ risposta di Dirk ...

Il problema è che si sta passando il vostro ingresso come numerico. Per R, 009 viene valutato come 9:

> 009 
[1] 9 

in modo che quando si esegue myfunction(009), in realtà corre myfunction(9). Non dovrebbe essere una sorpresa avere "9.csv" come output.

Invece, si dovrebbe passare l'input come un personaggio: "009":

> myfunction("009") 
[1] "009.csv" 
+0

Anche se questo funziona in questo esempio, il problema è che non sarà sempre in grado di digitare i parametri da un riga di comando e aggiungi "", a volte la funzione verrà chiamata da un'altra funzione su cui non hai alcun controllo e che non aggiunge "", semplicemente 009 e devi assicurarti che non diventi 9 nella tua funzione. Questa è la risposta che sto cercando (e mi ha portato qui) – chrisfs

Problemi correlati