2.3 生成正则序列
R 有一系列产生常用数列的工具。如 1:30
等价于向量 c(1, 2, ..., 29, 30)
。 在R 表达式中,冒号优先级别最高,因此 2*1:15
等价于 c(2, 4, ..., 28, 30)
。读者可以认真将 n <- 10
,1:n-1
,1:(n-1)
相互比较一下。
30:1
形式的句法(construction)可用来产生一个逆向的数列。
函数 seq()
是数列生成中最为常用的工具。它有五个参数,仅部分参数需要每次都设定。起始的两个参数,表示一个数列的首尾。如果只是给定这两个值,则和冒号运算符的效果完全一样了。如 seq(2,10)
等价于 2:10
。
seq()
和其他许多 R 函数的参数一样都可以用参数命名方式给定。在这情况下, 参数的顺序可以是任意的。这样,前两个参数就可以用 from=value
和 to=value
方式设定;因此 seq(1,30)
,seq(from=1, to=30)
,seq(to=30, from=1)
同 1:30
完全一 样。seq()
随后的两个参数是 by=value
和 length=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 中的每个元素都重复五次,然后将重复五次的元素逐一放入。
1. 译者注:我加过其他参数,也运行好好的。问题的关键在于,最终产生的数列长度 和 length(vector)
一致。 ↩