w R mogę wpisaćR tworzyć listę z przyrostu innych niż 1
> alist<-c(1:10)
> alist
[1] 1 2 3 4 5 6 7 8 9 10
Jak zrobić listę, która idzie w górę o krokach, które nie jest 1? Na przykład lista liczb parzystych
w R mogę wpisaćR tworzyć listę z przyrostu innych niż 1
> alist<-c(1:10)
> alist
[1] 1 2 3 4 5 6 7 8 9 10
Jak zrobić listę, która idzie w górę o krokach, które nie jest 1? Na przykład lista liczb parzystych
Komenda seq
to robi. Wykonanie seq(1,10,1)
robi to, co robi 1:10
. Możesz jednak zmienić ostatni parametr na inny, aby mógł wykonać kroki o dowolnym rozmiarze.
> #a vector of even numbers
> seq(0, 10, 2)
> [1] 0 2 4 6 8 10
Na marginesie to, co robisz, jest wektorem, a nie listą. Lista może zawierać wiele zupełnie różnych rodzajów informacji, podczas gdy wektory zawierają te same rodzaje wartości w każdej pozycji indeksu.
+1 Jako dalszy bok, i tylko by zmylić rzeczy, lista jest w rzeczywistości wektorem. Wypróbuj 'is.vector (as.list (1: 5))' a zobaczysz, że wynikiem jest 'TRUE'. – Andrie
więc on robi wektor tak czy inaczej ... :) – John
Myślę, że dodanie "by = 2" pomaga w czytelności dla seq (0, 10, przez = 2). –
Ponieważ R używa macierzy, możesz użyć mnożenia skalarnego, aby zmodyfikować każdy element w twoim wektorze.
> r <-c(0:10)
> r <- r * 2
> r
[1] 0 2 4 6 8 10 12 14 16 18 20
lub
> r <-c(0:10)*2
> r
[1] 0 2 4 6 8 10 12 14 16 18 20
Myślę, że szczególnie z R iz nowicjuszami ważne jest, aby nie wyrzucać słów "tablica", "lista" i "matryca", chyba że naprawdę mówisz o jednym z tych typów danych. Obiekt, który utworzyłeś, jest wektorem. Nie jest to macierz ani tablica. – adamleerich
Prawda, poślizgnąłem się i nazwałem wektor tablicą. Moja zła –
'c()' nie jest potrzebna, jeśli chcesz stworzyć wektor używając ':' – useR
Ku mojemu zaskoczeniu rozwiązanie @ Travis jest znacznie (4x) szybsze. Jeśli nie robisz czegoś naprawdę wielkiego (a generowanie sekwencji okazuje się czynnikiem ograniczającym), nadal będę głosował na seq
jako dużo łatwiejszy do odczytania.
edytuj: jak zaznacza Marek, seq.int
jest jeszcze szybszy.
> library(rbenchmark) # Note spelling: "rbenchmark", not "benchmark"
> benchmark(seq(0,1e6,by=2),(0:5e5)*2,seq.int(0L,1e6L,by=2L))
test replications elapsed relative user.self sys.self
2 (0:5e+05) * 2 100 0.587 3.536145 0.344 0.244
1 seq(0, 1e+06, by = 2) 100 2.760 16.626506 1.832 0.900
3 seq.int(0, 1000000, by = 2) 100 0.166 1.000000 0.056 0.096
Jeśli potrzebujesz szybkiego rozwiązania, to 'seq.int (0L, 1e6L, by = 2L)' – Marek
Założę się, że szybko dostrzeżesz odpowiedź na swoje pytanie, skanując pierwsze kilkanaście wpisów [podręcznika] (http://cran.r-project.org/doc/manuals/R -intro.html). (Podpowiedź: 2.3) – joran