Next: , Previous: Vector arithmetic, Up: Simple manipulations numbers and vectors



2.3 正则序列的产生

R 有一系列产生常用数列的工具。 如 1:30 等价于向量 c(1, 2, ..., 29, 30) 在表达式中,冒号优先级别最高,因此 2*1:15 等价于 c(2, 4, ..., 28, 30)。 读者可以认真将 n <- 101:n-11:(n-1)相互比较一下。

30:1 形式的句法(construction)可用来产生一个 逆向的数列。

函数 seq() 是产生数列中最为常用的工具。 它有五个参数,仅仅部分参数需要每次都设定。 起始的两个参数,表示 一个数列的首尾。如果只是 给定这两个值,则和冒号运算符的结果完全一样了。 如 seq(2,10) 等价于 2:10

seq() 和其他许多 R 函数的参数一样 都可以用命名方式给定。在这情况下,参数的顺序可以是任意的。 这样,前两个参数就可以用 from=valueto=value 方式设定;因此 seq(1,30)seq(from=1, to=30)seq(to=30, from=1)1:30 完全一样。seq() 接下来的两个参数 是 by=valuelength=value;它们分别表示这个数列的步长和长度。 如果二者没有设定,那么默认值就是 by=1(步长为1)。

例如

     > seq(-5, 5, by=.2) -> s3

将向量 c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0) 赋给 s3。类似的是,

     > s4 <- seq(length=51, from=-5, by=.2)

将在 s4 中产生一样的向量。

第五个参数是 along=vector。使用这个参数时, 必须是唯一的1,它可以创建数列 1, 2, ..., length(vector),或者是空数列(在向量vector为空时)。

还有一个相关的函数是 rep()它可以用各种复杂的方式重复一个对象。 最简单的方式就是

     > s5 <- rep(x, times=5)

这种方式先把 x 的完整拷贝五次,保持 x 的数列顺序,逐一放在 s5 中。 另一种有用的方式是

     > s6 <- rep(x, each=5)

这种放松把 x 中的每个元素都重复五次, 然后将重复五次的元素逐一放入。


Footnotes

[1] 译者注:我加过其他参数,也运行好好的。 问题的关键在于,最终产生的数列长度和length(vector)一致。