一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

R語言的數(shù)據(jù)結(jié)構(gòu)原來可以這樣理解

 微笑如酒 2018-08-30

這是R數(shù)據(jù)科學(xué)的讀書筆記之一,《R數(shù)據(jù)科學(xué)》是一本教你如何用R語言進(jìn)行數(shù)據(jù)分析的書。即便我使用R語言快2年多了,但是讀這本書還是受益頗多。

最早接觸R語言的時(shí)候看的是《R語言實(shí)戰(zhàn)》, 在第二章里,該書將R語言的數(shù)據(jù)結(jié)構(gòu)分為6種,向量、矩陣、數(shù)組、數(shù)據(jù)框、因子和列表。當(dāng)時(shí)的理解是,矩陣是二維的向量,數(shù)組是二維以上的向量,數(shù)據(jù)框是特殊性質(zhì)的列表。

但是讀完《R數(shù)據(jù)科學(xué)》的第15章:向量后,我發(fā)現(xiàn)原來R語言的數(shù)據(jù)結(jié)構(gòu)原來可以只分為兩類

  • 原子向量: 包含6種類型,邏輯性、整型、雙精度型、字符型、復(fù)數(shù)型和原始型

  • 遞歸向量: 更常見的名字叫做列表

原子向量和遞歸向量的 唯一區(qū)別 就在于其中存放的值是否都是同種類型。

  • 向量(vector), 矩陣(matrix)和數(shù)組(array)以及因子(factor)都只能存放一種數(shù)據(jù)類型,因此 is.atomic的判斷結(jié)果都是TRUE, 所以都是原子向量

  • 數(shù)據(jù)庫和列表可以包含不同類型的數(shù)據(jù),所以用 is.recursive的判斷結(jié)果是TRUE,所以都是遞歸向量

此外,每個(gè)向量都有兩個(gè)關(guān)鍵屬性(properties),類型和長度, 分別用 typeof()length()進(jìn)行查看。分別去用 typeof()查看向量、矩陣、數(shù)組、因子、數(shù)據(jù)框和列表時(shí),你會(huì)發(fā)現(xiàn)前面4個(gè)返回都是6種基本數(shù)據(jù)類型,而數(shù)據(jù)框和列表返回的都是'list'.

我們還可以在向量上附加任意多的元數(shù)據(jù)(metadata),這些元數(shù)據(jù)稱之為特征(attributes)。 附加不同的特性后就得到了擴(kuò)展向量(augmented vectors), 其中名稱、維度和類是三種特別重要的屬性。

如果你去查看attribute和property的中文翻譯時(shí),你會(huì)發(fā)現(xiàn)兩者都有一個(gè)釋義叫做屬性

從擴(kuò)展向量的角度上看數(shù)據(jù)類型時(shí),可以得到如下洞見

第一: 矩陣和數(shù)組相對(duì)于普通向量主要就多了一個(gè) dim屬性,所以我們可以通過如下的操作來創(chuàng)建矩陣和數(shù)組

  1. is.v.m.a <> function(x) {c(is.vector(x), is.matrix(x), is.array(x))}

  2. v <> c(1,2,3,4)

  3. is.v.m.a(v) # TRUE FALSE FALSE

  4. attr(v,'dim') <> c(2,2)

  5. is.v.m.a(v) # FALSE  TRUE  TRUE

  6. attr(v,'dim') <> c(1,2,2)

  7. is.v.m.a(v) # FALSE FALSE  TRUE  

注: 矩陣是特殊的數(shù)組。

第二:名稱是一種額外屬性, 對(duì)于向量是'names', 對(duì)于數(shù)組則是'dimnames[[x]]', x表示不同維度, 對(duì)于列表而言則是'names',對(duì)于數(shù)據(jù)框是'names'對(duì)于列名和'row.names'對(duì)于行名

  1. v <> c(1,2,3,4)

  2. attr(v,'names') <> c('a','b','c','d')

第三:類(class)也是一種屬性,類是面向?qū)ο缶幊痰囊粋€(gè)概念。在R語言中,我們會(huì)發(fā)現(xiàn)同一個(gè)函數(shù)居然可以用在不同的數(shù)據(jù)集,比如說 print用在ggplot2的對(duì)象中,結(jié)果是輸出圖片,這種函數(shù)就稱之為泛型函數(shù)。

  1. methods(print)# 內(nèi)容過多,不在這里展示

  2. # 我們可以具體某個(gè)函數(shù)的代碼

  3. getS3method('print','data.frame')

關(guān)于泛型函數(shù)的更多知識(shí)會(huì)在后續(xù)的面向?qū)ο缶幊汤锝榻B。

其他知識(shí)點(diǎn)

R語言的缺失值一般都標(biāo)記為'NA', 因此在讀取數(shù)據(jù)的時(shí)候默認(rèn)也將文件中的'NA'當(dāng)作缺失值,但是很有可能其他人會(huì)用'null'作為缺失值的標(biāo)記,所以結(jié)果就會(huì)導(dǎo)致這一列全部被當(dāng)做是字符串,影響后續(xù)的分析。

在向量取子集時(shí),熟悉Python的人需要注意一點(diǎn),Python中 x=[1,2,3,4];x[-1]表示選擇最后一個(gè)元素,而在R語言里 x=c(1,2,3,4);x[-1]表示刪除第一個(gè)元素,即R用負(fù)整數(shù)取子集時(shí)會(huì)丟棄對(duì)應(yīng)位置的元素。

[[[在提取列表時(shí),一定要注意, [[會(huì)使列表降低一個(gè)層次,而 [會(huì)返回一個(gè)新的、更小的列表,也就是

  1. l <> list(c(1,2,3))

  2. l[1] # 返回列表

  3. l[[1]] # 返回向量

為了更好理解這兩者在列表中的差異,作者還提供了一個(gè)非常形象的例子,我用另一個(gè)例子來說明下:

我所就讀的初中每個(gè)年級(jí)段大概有10個(gè)班級(jí),每個(gè)班級(jí)的人數(shù)都不太一樣。那么這里的一個(gè)年級(jí)段就是一個(gè)列表 x,每個(gè)班級(jí)都是列表里元素。那么 x[1]表示的是解散其他所有班級(jí),只留下第一個(gè)班級(jí)組成年級(jí)段。而 x[[1]]表示是第一個(gè)班級(jí)。 x[[1]][1]表示的可能是第一個(gè)班級(jí)里的第一個(gè)學(xué)生。

查看列表結(jié)構(gòu)的最好方式是用函數(shù)str


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    婷婷伊人综合中文字幕| 亚洲欧美日韩综合在线成成| 亚洲精品中文字幕欧美| 国产精品午夜一区二区三区| 欧美大粗爽一区二区三区| 日本在线高清精品人妻| 欧美黄色黑人一区二区| 尹人大香蕉一级片免费看| 欧美欧美欧美欧美一区| 国产精品99一区二区三区| 亚洲高清一区二区高清| 国产丝袜美女诱惑一区二区| 日韩性生活片免费观看| 欧美自拍系列精品在线| 十八禁日本一区二区三区| 可以在线看的欧美黄片| 亚洲一区二区三区一区| 国产精品尹人香蕉综合网| 免费国产成人性生活生活片| 粉嫩国产一区二区三区在线| 精品亚洲一区二区三区w竹菊| 日系韩系还是欧美久久| 99少妇偷拍视频在线| 99久久免费看国产精品| 日韩人妻欧美一区二区久久| 国产高清三级视频在线观看| 久久精品亚洲精品一区| 狠狠做深爱婷婷久久综合| 欧美日韩在线第一页日韩| 丰满人妻一二三区av| 国产韩国日本精品视频| 国产又长又粗又爽免费视频| 一区二区三区四区亚洲专区| 一个人的久久精彩视频| 欧美一级不卡视频在线观看| 亚洲国产成人av毛片国产| 九九热这里有精品20| 久久中文字幕中文字幕中文| 国产精品流白浆无遮挡| 午夜日韩在线观看视频| 国产精品白丝一区二区|