R 學(xué)習(xí)筆記(3) -- 列表

R 中的向量要求元素都為同一類型驱敲,而列表不一樣热凹,列表可以組合不同類型的元素鹿霸,類似于 Python 中的字典。

創(chuàng)建列表 list()

存儲一個員工的姓名秆乳,薪資懦鼠,是否為工會成員:

> j <- list(name="Joe", salary=55000, union=T)
> j
$name
[1] "Joe"

$salary
[1] 55000

$union
[1] TRUE

> # 有多種訪問列表元素的方式,$/[[ ]] 都可以
> j$salary
[1] 55000
> # 標(biāo)簽 tag 也可以簡寫屹堰,只要不引起歧義肛冶,R 都可以識別
> j$sal
[1] 55000
> j[["salary"]]
[1] 55000
> # 也可以用數(shù)字索引的方式
> j[[2]]
[1] 55000
> # 列表也是一種向量,可以用以下方式創(chuàng)建
> z <- vector(mode="list")
> z[["abc"]] <- 3
> z
$abc
[1] 3

訪問列表 lst 中的組件 c 的三種方法扯键,返回的是 c 的數(shù)據(jù)類型:

  • lst$c
  • lst[["c"]]
  • lst[[i]] i 是組件 c 在 lst 中的數(shù)字索引

與后兩種方法類似的列表操作還有:

  • lst["c"]
  • lst[i]

這兩種操作返回的是一個新列表睦袖,是原列表的子列表。
列表索引單中括號與雙重中括號的區(qū)別

> j[1:2]
$name
[1] "Joe"

$salary
[1] 55000

> j2 <- j[2]
> j2
$salary
[1] 55000

> class(j2)
[1] "list"
> str(j2)
List of 1
 $ salary: num 55000
> j3 <- j[[2]]
> j3
[1] 55000
> class(j3)
[1] "numeric"
> str(j3)
 num 55000
> # 雙重中括號一次只能取一個列表組件
> j[[1:2]]
Error in j[[1:2]] : 下標(biāo)出界

用單中括號對原列表取子集荣刑,返回子列表馅笙,用雙重中括號取原列表組件,返回的是組件本身的類型厉亏,而不是列表董习。


增加或刪除列表元素

列表創(chuàng)建之后可以增加新的組件,刪除某個組件時將其重新賦值為 NULL 即可爱只,刪除一個組件之后皿淋,它之后的元素索引全部減 1:

> z <- list(a="abc",b=1)
> z
$a
[1] "abc"

$b
[1] 1

> z$c <- "test"
> z
$a
[1] "abc"

$b
[1] 1

$c
[1] "test"

> z[[4]] <- 123
> z
$a
[1] "abc"

$b
[1] 1

$c
[1] "test"

[[4]]
[1] 123

> z$b <- NULL
> z
$a
[1] "abc"

$c
[1] "test"

[[3]]
[1] 123

> # 用 c() 連接函數(shù)合并兩個列表
> c(z,list(500))
$a
[1] "abc"

$c
[1] "test"

[[3]]
[1] 123

[[4]]
[1] 500

訪問列表元素和值

names() 函數(shù)可直接獲取列表各元素的名字,unlist() 函數(shù)去列表化恬试,也可以得到列表各元素的值:

> j
$name
[1] "Joe"

$salary
[1] 55000

$union
[1] TRUE

> names(j)
[1] "name"   "salary" "union" 
> j[["name"]]
[1] "Joe"
> unj <- unlist(j)
> unj
   name  salary   union 
  "Joe" "55000"  "TRUE" 
> class(unj)
[1] "character"
> unname(unj)
[1] "Joe"   "55000" "TRUE" 

unlist() 去列表化時窝趣,如果列表中元素類型不同,會轉(zhuǎn)為可以最大限度保持不同組件特性的類型训柴,例如本例中的字符串哑舒。
unname() 函數(shù)可以去除 unlist() 得到的向量的元素名字。


對列表使用 apply 函數(shù)

lapply() 就是 list apply畦粮,對列表作用的 apply 函數(shù)散址,得到的結(jié)果也是一個列表。
sapply() 就是 simplified apply宣赔,得到矩陣或向量形式的結(jié)果预麸。

> L <- list(1:3,25:29)
> L
[[1]]
[1] 1 2 3

[[2]]
[1] 25 26 27 28 29

> lapply(L,median)
[[1]]
[1] 2

[[2]]
[1] 27

> sapply(L,median)
[1]  2 27

order() 函數(shù)對向量排序,返回的是排序后向量在原向量中的索引:

> x <- c(12,5,13,8)
> order(x)
[1] 2 4 1 3
> sort(x)
[1]  5  8 12 13

sort() 函數(shù)返回排序后的向量儒将。


遞歸列表

列表可以是遞歸的吏祸,即列表的組件也是列表。
連接函數(shù) c() 有一個可選參數(shù) recursive 決定在拼接的時候是否把原列表壓平钩蚊,就是把所有組件的元素提取出來組成一個向量贡翘。

> list(a=1,b=2,c=list(d=5,e=9))
$a
[1] 1

$b
[1] 2

$c
$c$d
[1] 5

$c$e
[1] 9


> c(list(a=1,b=2,c=list(d=5,e=9)),recursive=T)
  a   b c.d c.e 
  1   2   5   9
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹈矮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸣驱,更是在濱河造成了極大的恐慌泛鸟,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踊东,死亡現(xiàn)場離奇詭異北滥,居然都是意外死亡,警方通過查閱死者的電腦和手機闸翅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門再芋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坚冀,你說我怎么就攤上這事济赎。” “怎么了记某?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵司训,是天一觀的道長。 經(jīng)常有香客問我辙纬,道長豁遭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任贺拣,我火速辦了婚禮蓖谢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘譬涡。我一直安慰自己闪幽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布涡匀。 她就那樣靜靜地躺著盯腌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陨瘩。 梳的紋絲不亂的頭發(fā)上腕够,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音舌劳,去河邊找鬼帚湘。 笑死,一個胖子當(dāng)著我的面吹牛甚淡,可吹牛的內(nèi)容都是我干的大诸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼资柔!你這毒婦竟也來了焙贷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤贿堰,失蹤者是張志新(化名)和其女友劉穎辙芍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羹与,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡沸手,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了注簿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡跳仿,死狀恐怖诡渴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情菲语,我是刑警寧澤妄辩,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站山上,受9級特大地震影響眼耀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜佩憾,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一哮伟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妄帘,春花似錦楞黄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至致盟,卻和暖如春碎税,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背馏锡。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工雷蹂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人眷篇。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓萎河,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虐杯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容