问题
要创建一个向量(vector)。
解决方案
用c(…)操作符根据给定的值创建向量。
讨论
向量不仅仅是一种数据结构,它还是R的核心部件。向量中可以包含数字、字符串或逻辑值,但不能把这些东西同时放在一个向量中。可以用c(…)操作符将简单的元素构建成向量:
代码
> c(1,1,2,3,5,8,13,21)
[1] 1 1 2 3 5 8 13 21
> c(1*pi, 2*pi, 3*pi, 4*pi)
[1] 3.141593 6.283185 9.424778 12.566371
> c(“Everyone”,”loves”, “stats.”)
[1] “Everyone” “loves””stats.”
> c(TRUE,TRUE,FALSE,TRUE)
[1] TRUE TRUE FALSE TRUE
如果c(…)操作符的参数本身就是向量,那么c(…)就会将这些向量拼接成单独一个向量:
代码
> v1 <- c(1,2,3)
> v2 <- c(4,5,6)
> c(v1,v2)
[1] 1 2 3 4 5 6
向量中不能同时包含多种数据类型,例如不能把数字和字符串放在同一个向量中。如果用多种元素构建向量,R会尝试将其转换成同一种数据类型:
代码
> v1 <- c(1,2,3)
> v3 <-c(“A”,”B”,”C”)
> c(v1,v3)
[1] “1” “2””3″ “A” “B” “C”
上面的代码视图用数字和字符串创建向量。在创建向量前,R将所有的数字都转换成了字符串,使得向量中的元素都是同一数据类型。从技术上说,只有两个模式(mode)相同的数据元素才能共存于一个向量中。3.1415的模式是数字,而“foo”的模式则是字符:
代码
> mode(3.1415)
[1] “numeric”
> mode(“foo”)
[1] “character”
这两种模式是不兼容得。为了将它们放在一个向量中,R将3.1415转换成字符模式,使其跟“foo”兼容:
代码
> c(3.1415, “foo”)
[1] “3.1415” “foo”
> mode(c(3.1415, “foo”))
[1] “character”
注意:c是一个泛型操作符,就是说它可以用于各种数据类型,而不仅仅是向量。但它对各种数据类型的处理结果可能会跟读者的想象有差别,所以在用c处理其他数据类型和对象时要注意检查操作的结果。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。