统计分析:使用 R 入门 / R / 向量
TRUE
或FALSE
[1])。在本主题中,我们将使用“datasets”包提供的几个示例向量,其中包含美国各州的数据(请参阅?state
)。R 本身就是一个基于向量的程序;事实上,我们在之前的计算中使用过的数字也被视为只有一个元素的向量。这意味着 R 中的大多数基本函数在被赋予向量作为参数时都会表现得合理,如下所示。state.area #a NUMERIC vector giving the area of US states, in square miles
state.name #a CHARACTER vector (note the quote marks) of state names
sq.km <- state.area*2.59 #Arithmetic works on numeric vectors, e.g. convert sq miles to sq km
sq.km #... the new vector has the calculation applied to each element in turn
sqrt(sq.km) #Many mathematical functions also apply to each element in turn
range(state.area) #But some functions return different length vectors (here, just the max & min).
length(state.area) #and some, like this useful one, just return a single value.
[1] 51609 589757 113909 53104 158693 104247 5009 2057 58560 58876 6450 83557 56400
[14] 36291 56290 82264 40395 48523 33215 10577 8257 58216 84068 47716 69686 147138 [27] 77227 110540 9304 7836 121666 49576 52586 70665 41222 69919 96981 45333 1214 [40] 31055 77047 42244 267339 84916 9609 40815 68192 24181 56154 97914 > state.name # 一个 CHARACTER 向量(注意引号),包含各州名称
[1] "Alabama" "Alaska" "Arizona" "Arkansas" [5] "California" "Colorado" "Connecticut" "Delaware" [9] "Florida" "Georgia" "Hawaii" "Idaho"
[13] "伊利诺伊州" "印第安纳州" "爱荷华州" "堪萨斯州" [17] "肯塔基州" "路易斯安那州" "缅因州" "马里兰州" [21] "马萨诸塞州" "密歇根州" "明尼苏达州" "密西西比州" [25] "密苏里州" "蒙大拿州" "内布拉斯加州" "内华达州" [29] "新罕布什尔州" "新泽西州" "新墨西哥州" "纽约州" [33] "北卡罗来纳州" "北达科他州" "俄亥俄州" "俄克拉荷马州" [37] "俄勒冈州" "宾夕法尼亚州" "最小的州" "南卡罗来纳州" [41] "南达科他州" "田纳西州" "德克萨斯州" "犹他州" [45] "佛蒙特州" "弗吉尼亚州" "华盛顿州" "西弗吉尼亚州" [49] "威斯康星州" "怀俄明州" > sq.km <- state.area*2.59 # 标准算术运算适用于数值向量,例如将平方英里转换为平方公里 > sq.km # ... 给出另一个向量,其中对每个元素都执行了计算
[1] 133667.31 1527470.63 295024.31 137539.36 411014.87 269999.73 12973.31 5327.63 [9] 151670.40 152488.84 16705.50 216412.63 146076.00 93993.69 145791.10 213063.76
[17] 104623.05 125674.57 86026.85 27394.43 21385.63 150779.44 217736.12 123584.44 [25] 180486.74 381087.42 200017.93 286298.60 24097.36 20295.24 315114.94 128401.84 [33] 136197.74 183022.35 106764.98 181090.21 251180.79 117412.47 3144.26 80432.45 [41] 199551.73 109411.96 692408.01 219932.44 24887.31 105710.85 176617.28 62628.79 [49] 145438.86 253597.26 > sqrt(sq.km) # 许多数学函数也适用于每个元素
[1] 365.60540 1235.90883 543.16140 370.86299 641.10441 519.61498 113.90044 72.99062 [9] 389.44884 390.49819 129.24976 465.20171 382.19890 306.58390 381.82601 461.58830
[17] 323.45487 354.50609 293.30334 165.51263 146.23826 388.30328 466.62203 351.54579 [25] 424.83731 617.32278 447.23364 535.06878 155.23324 142.46136 561.35100 358.33202 [33] 369.04978 427.81111 326.74911 425.54695 501.17940 342.65503 56.07370 283.60615 [41] 446.71213 330.77479 832.11058 468.96955 157.75712 325.13205 420.25859 250.25745 [49] 381.36447 503.58441 > range(state.area) # 但是有些函数会返回不同长度的向量(这里,只有最大值和最小值)。 [1] 1214 589757 > length(state.area) # 有些函数,像这个有用的函数,只返回单个值。 [1] 50
c()
,之所以这样命名是因为它concatenates(连接)对象在一起。但是,如果您想创建由数字的规则序列组成的向量(例如 2,4,6,8,10,12 或 1,1,2,2,1,1,2,2),您可以使用几个替代函数,包括seq()
、rep()
和:
运算符。c("one", "two", "three", "pi") #Make a character vector
c(1,2,3,pi) #Make a numeric vector
seq(1,3) #Create a sequence of numbers
1:3 #A shortcut for the same thing (but less flexible)
i <- 1:3 #You can store a vector
i
i <- c(i,pi) #To add more elements, you must assign again, e.g. using c()
i
i <- c(i, "text") #A vector cannot contain different data types, so ...
i #... R converts all elements to the same type
i+1 #The numbers are now strings of text: arithmetic is impossible
rep(1, 10) #The "rep" function repeats its first argument
rep(3:1,10) #The first argument can also be a vector
huge.vector <- 0:(10^7) #R can easily cope with very big vectors
#huge.vector #VERY BAD IDEA TO UNCOMMENT THIS, unless you want to print out 10 million numbers
rm(huge.vector) #"rm" removes objects. Deleting huge unused objects is sensible
[1] "one" "two" "three" "pi" > c(1,2,3,pi) # 创建一个数值向量 [1] 1.000000 2.000000 3.000000 3.141593 > seq(1,3) # 创建一个数字序列 [1] 1 2 3 > 1:3 # 同样的操作的简写(但不太灵活) [1] 1 2 3 > i <- 1:3 # 可以存储一个向量 > i [1] 1 2 3 > i <- c(i,pi) # 要添加更多元素,必须再次赋值,例如使用 c() > i [1] 1.000000 2.000000 3.000000 3.141593 > i <- c(i, "text") # 向量不能包含不同数据类型,所以 ... > i # ... R 将所有元素转换为相同类型 [1] "1" "2" "3" "3.14159265358979" "text" > i+1 # 数字现在是文本字符串:算术运算不可能 Error in i + 1 : non-numeric argument to binary operator > rep(1, 10) # "rep" 函数重复其第一个参数
[1] 1 1 1 1 1 1 1 1 1 1
> rep(3:1,10) # 第一个参数也可以是一个向量
[1] 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1
> huge.vector <- 0:(10^7) # R 可以轻松处理非常大的向量 > #huge.vector # 除非您想打印出 1000 万个数字,否则不要取消此注释 > rm(huge.vector) # "rm" 删除对象。删除大型未使用的对象是有意义的
- ↑ 这些是 R 中的特殊词语,不能用作对象的名称。对象
T
和F
是TRUE
和FALSE
的临时快捷方式,但如果您使用它们,请注意:因为 T 和 F 只是普通的对象名称,您可以通过覆盖它们来更改它们的含义。