2016-02-29 11 views
8

Non riesco a capire come creare un vettore in cui le stringhe sono costanti ma i numeri non lo sono. Per esempio:come creare una sequenza di stringhe con numeri diversi in R

c("raster[1]","raster[2]","raster[3]") 

mi piacerebbe usare qualcosa come seq(raster[1],raster[99], by=1), ma questo non funziona.

Grazie in anticipo.

+3

Perché non funziona? Pubblica i tuoi tentativi riproducibili in modo che possiamo aiutarti. Se stai costruendo codice con stringhe per una valutazione successiva, è il modo sbagliato di fare le cose. –

+0

Puoi considerare le risposte qui per una bella discussione e alternative http://stackoverflow.com/questions/5812493/adding-leading-zeros-using-r – discipulus

risposta

16

La funzione sprintf dovrebbe funzionare anche:

rasters <- sprintf("raster[%s]",seq(1:99)) 
head(rasters) 
[1] "raster[1]" "raster[2]" "raster[3]" "raster[4]" "raster[5]" "raster[6]" 

Come suggerito da Richard Scriven, %d è più efficiente di %s. Quindi, se lavorassi con una sequenza più lunga, sarebbe più appropriato usare:

rasters <- sprintf("raster[%d]",seq(1:99)) 
+2

'% d' potrebbe essere più appropriato. Penso con '% s', la sequenza viene prima forzata al carattere e poi applicata. Ma potrei sbagliarmi. –

+0

@RichardScriven, sei a qualcosa. L'uso di '% s' rende sicuramente R la coercizione delle cifre in caratteri. Quindi, '% d' è più efficiente. Lo aggiungerò alla soluzione. Grazie! – Abdou

9

Possiamo fare

paste0("raster[", seq(1:6), "]") 
# [1] "raster[1]" "raster[2]" "raster[3]" "raster[4]" "raster[5]" "raster[6]" 
+0

grazie per entrambe le risposte! entrambi lavorano per me. È un peccato che non potessi decidere quale sia il migliore, quindi ho appena lanciato una moneta per sceglierne una, anche se dovrebbe essere meglio se almeno qualcuno ha il marchio. Ho votato entrambi, però. –

+0

@Aguscamacho nessun problema; di solito c'è più di un modo per risolvere un problema. Non ero a conoscenza del metodo 'sprintf', quindi ho anche imparato qualcosa. – SymbolixAU

Problemi correlati