本节主要讲述如何读取vector中的元素。
> x
[1] NA NA 0.4504126 NA -1.4426448 0.2306430 NA
[8] -0.4536931 NA NA 1.5474278 -1.3766467 NA NA
[15] NA 0.1333308 NA 1.3035438 -0.5232416 NA -0.8912757
[22] 1.6610468 0.7708734 NA NA NA NA -2.8887473
[29] -0.7602061 1.3930220 NA 0.2731169 -0.5301941 0.2281920 -1.2202181
[36] NA NA NA 0.3059965 NA
提取向量前10个元素
> x[1:10]
[1] NA NA 0.4504126 NA -1.4426448 0.2306430 NA
[8] -0.4536931 NA NA
注意:不是从0开始,是从1开始。
提取向量中非NA元素
> y <- x[!is.na(x)]
> y
[1] 0.4504126 -1.4426448 0.2306430 -0.4536931 1.5474278 -1.3766467 0.1333308
[8] 1.3035438 -0.5232416 -0.8912757 1.6610468 0.7708734 -2.8887473 -0.7602061
[15] 1.3930220 0.2731169 -0.5301941 0.2281920 -1.2202181 0.3059965
提取向量中所有大于0的元素
> y[y > 0]
[1] 0.4504126 0.2306430 1.5474278 0.1333308 1.3035438 1.6610468 0.7708734 1.3930220
[9] 0.2731169 0.2281920 0.3059965
> x[!is.na(x) & x > 0]
[1] 0.4504126 0.2306430 1.5474278 0.1333308 1.3035438 1.6610468 0.7708734 1.3930220
[9] 0.2731169 0.2281920 0.3059965
提取特定位置元素
如提取x中第3,5,7个元素
> x[c(3,5,7)]
[1] 0.4504126 -1.4426448 NA
swirl给的答案是上面这种,我自己写的时候用的是c(x[3], x[5], x[7])
,得到的结果与上面是一致的,可能速度会慢一点。
x中元素个数是40个,当我们访问x[300]
的时候,就会返回NA
。所以我们不能越界。
提取除特定位置以外的元素
比如提取x中除第二个,第10个以外的所有元素
> x[c(-2, -10)]
[1] NA 0.4504126 NA -1.4426448 0.2306430 NA -0.4536931
[8] NA 1.5474278 -1.3766467 NA NA NA 0.1333308
[15] NA 1.3035438 -0.5232416 NA -0.8912757 1.6610468 0.7708734
[22] NA NA NA NA -2.8887473 -0.7602061 1.3930220
[29] NA 0.2731169 -0.5301941 0.2281920 -1.2202181 NA NA
[36] NA 0.3059965 NA
使用x[-c(2, 10)]
也会返回同样的结果,只要在前面加个负号即可。
创建元素带名字的vector
> vect <- c(foo = 11, bar = 2, norf = NA)
> vect
foo bar norf
11 2 NA
获取vector的names
> names(vect)
[1] "foo" "bar" "norf"
> vect2 <- c(11, 2, NA)
> names(vect2) <- c("foo", "bar", "norf")
比较vect
和vect2
是否一样:
> identical(vect, vect2)
[1] TRUE
获取第二个元素
> vect["bar"]
bar
2
> vect[c("foo", "bar")]
foo bar
11 2