本节主要讲述如何读取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")

比较vectvect2是否一样:

> identical(vect, vect2)
[1] TRUE

获取第二个元素

> vect["bar"]
bar 
  2
> vect[c("foo", "bar")]
foo bar 
 11   2

results matching ""

    No results matching ""