R
语言中生成序列和重复序列的方法
学习R
中的关于数字序列的一些内容
在R
中创建数字序列的最简单方法是使用:
运算符,我们在console
里输入1:20
:
> 1:20
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
返回了一个1
到20
的整数数列,我们还可以用它来创建一个实数数列:
> pi:10
[1] 3.141593 4.141593 5.141593 6.141593 7.141593 8.141593 9.141593
结果是一个以pi (3.142 ...)
开始并以1
递增的实数向量。由于我们序列中的下一个数将大于10
,所以永远不会达到上限10
。
如果我们输入15:1
会怎么样?
> 15:1
[1] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
返回的是以1
递减的实数向量。
如果我们希望创建条件更复杂一点的向量,:
运算符明显无法满足要求。这个时候我们就需要用seq()
函数。
seq()
函数的基础功能和:
类似,我们可以试试seq(1:20)
:
> seq(1:20)
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
返回了和1:20
同样的结果。
现在我们想要生成一个0-10
范围内,以0.5
递增的向量,应该怎么做呢?
> seq(0, 10, by=0.5)
[1] 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0
或者,也许我们不在乎增量是多少,我们只想要5
到10
之间的30
个数字序列:
> my_seq <- seq(5,10, length=30)
> length(my_seq)
[1] 30
通过length()
函数,我们可以看到确实生成了长度为30
的序列。
现在假设我们不知道my_seq
的长度,但是我们想生成一个与它长度相同的序列。同样可以使用seq()
函数:
> seq(along.with = my_seq)
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
但是,与许多常见任务一样,R
为此具有一个单独的内置函数,称为seq_along()
。
> seq_along(my_seq)
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
在R
中,对同一个问题经常会有多种解法,通常来说,输入较少代码的方法是最好的。但是代码的可读性也很重要,可读性好的代码能让你和别人都清楚的知道代码的功能。
如果R
具有用于特定任务的内置函数,则该函数可能已针对该目的进行了高度优化,一般来说这个内置函数是达成任务的最好选择。当没有合适的内置函数时,就到了需要我们自己来编写函数的时候。
现在我们想创建一个重复的序列,比如创建一个40
个0
的序列,可以用rep
函数:
> rep(0, times=40)
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我们还可以对向量也进行重复:
> rep(c(0, 1, 2), times = 10)
[1] 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2
如果不想循环重复,而是0
重复10
次,1
重复10
次,2
重复10
次,可以指定each
参数:
> rep(c(0, 1, 2), each=10)
[1] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
:
,也可以用seq
函数rep
函数R
中,有一些针对特定任务的内置函数,一般这是我们的最优选择本文首发于公众号:柠檬培养师(ID: yantinger90),欢迎关注!