山海之间

R语言学习-2-Sequences of Numbers

R语言学习-2-Sequences of Numbers
2020-04-09 · 5 min read
R语言 教程

R语言中生成序列和重复序列的方法

Sequences of Numbers

学习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

返回了一个120的整数数列,我们还可以用它来创建一个实数数列:

> 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()函数的基础功能和:类似,我们可以试试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

或者,也许我们不在乎增量是多少,我们只想要510之间的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具有用于特定任务的内置函数,则该函数可能已针对该目的进行了高度优化,一般来说这个内置函数是达成任务的最好选择。当没有合适的内置函数时,就到了需要我们自己来编写函数的时候。

rep()函数

现在我们想创建一个重复的序列,比如创建一个400的序列,可以用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),欢迎关注!

Powered by Gridea,浙ICP备17039354号-1,© 2019 - 2020🍋