问题
如何生成一个向量。
解决方案
通过c(...)命令对给定的值构建一个向量。
讨论
向量不仅是R的一种数据结构,它还是贯通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转换为字符类型,使得3.1415的类型与"foo"的类型一样: > c(3.1415, "foo") [1] "3.1415" "foo" > mode(c(3.1415, "foo")) [1] "character"
警告:c是一个通用的运算符,这意味着它不仅应用于向量,同时也应用于其他的数据类型。但是,它可能不是那么精确地与用户预期相一致。因此在将c命令用于其他数据类型和对象前,要查看它的效果。
求个红包