Подтвердить что ты не робот

R, составляющий список с приращением, отличным от 1

В R я могу напечатать

> alist<-c(1:10)
> alist
 [1]  1  2  3  4  5  6  7  8  9 10

Как создать список, который увеличивается с шагом, который не равен 1? Например, список четных чисел

4b9b3361

Ответ 1

Команда seq делает это. Выполнение seq(1,10,1) делает то, что делает 1:10. Тем не менее, вы можете изменить последний параметр, чтобы быть чем-то другим, чтобы он мог выполнять действия любого размера, который вам нравится.

> #a vector of even numbers
> seq(0, 10, 2)
> [1]  0  2  4  6  8 10

Как в сторону, то, что вы делаете, это вектор, а не список. Список может содержать много совершенно разных видов информации, тогда как векторы содержат одинаковые значения в каждой позиции индекса.

Ответ 2

Так как 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

Ответ 3

К моему удивлению, решение @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