2013-03-24 4 views
23

Ho una domanda sulla creazione di vettori. Se faccio a <- 1:10, "a" ha i valori 1,2,3,4,5,6,7,8,9,10.Come si creano vettori con intervalli specifici in R?

La mia domanda è come si crea un vettore con intervalli specifici tra i suoi elementi. Ad esempio, vorrei creare un vettore con valori compresi tra 1 e 100, ma contare solo a intervalli di 5 in modo da ottenere un vettore con i valori 5,10,15,20, ..., 95,100

Penso che in Matlab possiamo fare 1:5:100, come lo facciamo usando R?

Potrei provare a fare 5*(1:20) ma c'è un modo più breve? (poiché in questo caso avrei bisogno di conoscere l'intera lunghezza (100) e poi dividere per la dimensione dell'intervallo (5) per ottenere il 20)

+5

So che a volte è difficile trovare buoni termini di ricerca, ma se io google "r sequence", il secondo hit è la pagina di aiuto di "seq". La funzione è probabilmente anche parte della maggior parte delle introduzioni di base a R. – Roland

+3

Sì, ho provato diverse cose e non sono riuscito a trovarlo .. non mi è venuto in mente di scrivere "sequenza" .. Ho continuato a pensare agli intervalli – Luli

risposta

46

In R la funzione equivalente è seq e puoi usarla con l'opzione by:

seq(from = 5, to = 100, by = 5) 
# [1] 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 

Oltre a by si può avere anche altre opzioni, come length.out e along.with.

length.out: Se si desidera ottenere un totale di 10 numeri compresi tra 0 e 1, per esempio:

seq(0, 1, length.out = 10) 
# gives 10 equally spaced numbers from 0 to 1 

along.with: Prende la lunghezza del vettore fornite come input e fornisce un vettore da 1: length (input).

seq(along.with=c(10,20,30)) 
# [1] 1 2 3 

Anche se, invece di utilizzare l'opzione along.with, si raccomanda di utilizzare seq_along in questo caso. Dalla documentazione per ?seq

seq è generico, e solo il metodo di default è descritto qui. Si noti che invia sulla classe del primo argomento indipendentemente dai nomi degli argomenti. Questo può avere conseguenze impreviste se viene chiamato con un solo argomento che intenda questo come seguito. È molto meglio usare seq_along in questo caso.

seq_along: Invece di seq(along.with(.))

seq_along(c(10,20,30)) 
# [1] 1 2 3 

Spero che questo aiuti.