В R я могу напечатать
> alist<-c(1:10)
> alist
[1] 1 2 3 4 5 6 7 8 9 10
Как создать список, который увеличивается с шагом, который не равен 1? Например, список четных чисел
В R я могу напечатать
> alist<-c(1:10)
> alist
[1] 1 2 3 4 5 6 7 8 9 10
Как создать список, который увеличивается с шагом, который не равен 1? Например, список четных чисел
Команда seq
делает это. Выполнение seq(1,10,1)
делает то, что делает 1:10
. Тем не менее, вы можете изменить последний параметр, чтобы быть чем-то другим, чтобы он мог выполнять действия любого размера, который вам нравится.
> #a vector of even numbers
> seq(0, 10, 2)
> [1] 0 2 4 6 8 10
Как в сторону, то, что вы делаете, это вектор, а не список. Список может содержать много совершенно разных видов информации, тогда как векторы содержат одинаковые значения в каждой позиции индекса.
Так как R использует матрицы, вы можете использовать скалярное умножение для модификации каждого элемента в вашем массиве.
> r <-c(0:10)
> r <- r * 2
> r
[1] 0 2 4 6 8 10 12 14 16 18 20
или
> r <-c(0:10)*2
> r
[1] 0 2 4 6 8 10 12 14 16 18 20
К моему удивлению, решение @Travis значительно (4 раза) быстрее. Если вы не делаете что-то действительно огромное (и поколение поколений оказывается лимитирующим фактором), я все равно проголосую за seq
, поскольку его гораздо легче читать.
изменить: как указывает Марек, seq.int
еще быстрее.
> 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