![大数据分析与应用实战:统计机器学习之数据导向编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/943/44509943/b_44509943.jpg)
1.3.7 R语言原生数据对象取值
本节介绍向量、矩阵、数组、数据集与列表等取值方式,向量或列表均为一维,取值(或称索引)使用中括号运算符[]或[[]],其中无逗号(,)。假设x为一向量,取值语法为x[i],i可以为整数值向量、字符向量或逻辑值向量,放入中括号中的向量,须用冒号运算符或c()函数创建。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P56_19876.jpg?sign=1739511110-NHXhfawpB04FeEvCWzS2rBODviVtRDvH-0-e8b3592493d85cbae2bb3a1a2b9a3cbe)
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P57_19877.jpg?sign=1739511110-dDLhz9yGpQdtIneroJQH08rOHC5jQ2HU-0-208de03e5653b5c1150f0addd848c118)
真假逻辑取值,或称逻辑值索引(logical indexing),是数据处理与分析实战常用的技巧之一,只有位置对应到真值(TRUE)的元素会被取出。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P57_20065.jpg?sign=1739511110-BuYkrGe5LuH6JU05aKaNO7mnErB5yIHA-0-4eca08aa63e9cb3a51dbb289ada384fe)
理解上述原理后,再结合前述的循环与向量化运算,可以快速地取出符合条件的元素,其中二元运算符%in%返回值亦为真假逻辑值。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P58_20067.jpg?sign=1739511110-FyMMGjPxYJGeoFyWBzmff9Kj96qGfNq8-0-1624aadb8ce5f74cdc8d539828d191a8)
列表是一维结构,取值方式类似向量,但要注意两对中括号[[]]与一对中括号[]的差异。两对中括号里可为一个整数值,或是长度为1的字符向量,也就是说两对中括号只能取出单一元素,且取出对象的类别为该元素类别值。而一对中括号也是内附位置编号或名称字符,但是可以取出多个元素,即取出的对象是多个元素形成的子列表。具名列表还可以通过符号$后面串接元素名称来取值,与两对中括号一样,也只能取出单一元素。
下面延续1.3.4节列表的mylist对象,练习前述列表取值方式。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P59_20069.jpg?sign=1739511110-x6bind0Q17dEr45BsQCFdPkz5102cWz3-0-ccf8f95c3cb640f101ee821729503cbd)
再次强调,请注意不同的列表索引方式([],[[]],$)取出的数据对象类别。Python语言也有相同的状况,请参考1.4.2节Python语言衍生数据对象取值(pandas套件)。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P60_2715.jpg?sign=1739511110-JAEFD9LavloDeIyOqeObuUjG9waBfvb9-0-63f8e6a570a207819f67924da6df975a)
矩阵(二维)或数组(三维以上)取值用[],其中至少有一个逗号(,)。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P60_19879.jpg?sign=1739511110-FWlZ7QyZD9koavOKIriHahE8PVOJbvro-0-67d74fa3778ccfa75991948c30a3202d)
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P61_19880.jpg?sign=1739511110-LosLLwpcX1tMZ9Zl3l8KpV8tYf7vnqqJ-0-3fe9313d18f3866ba9d614a28e302c8e)
前面取单行单列的结果默认均为向量对象,如要以矩阵呈现取值结果,可在中括号取值运算符中加上drop=FALSE的设定(注:Python语言也有此要求,参见1.4.3节Python语言类别变量编码的reshape()方法说明)。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P62_19882.jpg?sign=1739511110-PgemT54r7OPsyS6vigy4egRVVYywjTz2-0-e38fca1e93f38d0bd3de8597e4f44f00)
如前所述,数据集可以视为列表或矩阵,因此列表与矩阵的取值方式皆可用,建议初学者特别留意这一点。
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P62_19883.jpg?sign=1739511110-DwoIRQLFloWVVi836y7XvTiOwgknIY4n-0-11b6ff0ebcadc0fc9c6104974d70ae48)
![](https://epubservercos.yuewen.com/027AFF/23721555909466506/epubprivate/OEBPS/Images/Figure-P63_19884.jpg?sign=1739511110-spcyg4fApYJhRPIQcgBUr0lunQDFWrMR-0-188ecc56ffc45a23951056451bd13697)