将列表转换为 R 中的命名向量

Converting a list into a named vector in R

我使用 R 上的 pvclust 包进行了聚类分析。我使用命令 "pvpick" 提取了生成的聚类组件,得到了一个包含 8 个聚类的列表。

[[1]]
[1] "sco.plu" "tra.myo"

[[2]]
[1] "sya.pap" "syn.foe" "syn.int"

[[3]]
[1] "par.bra" "sya.mic"

[[4]]
[1] "bal.cap" "spa.axi"

[[5]]
[1] "achi.lin" "gin.cir"  "gym.vic"  "tha.nat" 

[[6]]
 [1] "alb.vul"  "car.bar"  "cha.fab"  "cyn.vor"  "eut.all"  "fis.tab"  "hae.aur"  "hae.ste"  "pol.vir"  "sel.cru"  "spa.fro" 
[12] "tri.letp" "ula.lef" 

[[7]]
 [1] "aux.roc" "car.cry" "car.hip" "car.lat" "clo.chr" "cyn.jam" "ech.nau" "ech.neu" "elo.sau" "hae.par" "hae.plu" "lut.syn"
[13] "lyc.bat" "ocy.chr" "oli.pal" "opi.ogl" "ort.rub" "rac.can" "rhi.por" "sco.bra" "sco.cav" "sco.reg"

[[8]]
 [1] "aca.qua" "aca.bah" "aca.chi" "alu.mon" "ani.vir" "arc.rho" "asp.lun" "bag.bag" "bag.mar" "cal.cal" "cal.pen" "cal.pnt"
[13] "can.pul" "cat.spi" "cen.par" "cha.str" "chi.spi" "con.nob" "cyn.lei" "cyn.mic" "dac.vol" "dec.pun" "dia.aur" "epi.ads"
[25] "gen.lut" "gen.mac" "het.cru" "hol.cil" "hol.ads" "lac.tri" "lar.bre" "lut.ana" "lut.joc" "mic.fur" "not.gra" "pri.are"
[37] "pri.pun" "sci.pro" "sel.vom" "sel.bro"

为了我的下一次分析,我需要从这个列表中创建一个 "named vector",就像你使用集群包的 "cuttree" 函数时得到的一样,每个物种名称(即 "sco.plu") 作为名称及其在向量中对应的簇号。看起来像这样:

> memb_average
 aca.qua  aca.bah  aca.chi achi.lin  alb.vul  alu.mon  ani.vir  arc.rho  asp.lun  aux.roc  bag.bag  bag.mar  bal.cap  cal.cal 
       1        1        1        2        3        1        1        1        1        4        1        1        1        1 
 cal.pen  cal.pnt  can.pul  car.bar  car.cry  car.hip  car.lat  cat.spi  cen.par  cha.fab  cha.str  chi.spi  clo.chr  con.nob 
       1        1        1        3        4        4        4        1        1        4        1        1        4        1 
 cyn.jam  cyn.lei  cyn.mic  cyn.vor  dac.vol  dec.pun  dia.aur  ech.nau  ech.neu  elo.sau  epi.ads  eug.bra  eut.all  fis.tab 
       5        6        6        3        5        1        1        4        4        5        1        1        4        3 
 gen.lut  gen.mac  gin.cir  gym.vic  hae.aur  hae.par  hae.plu  hae.ste  het.cru  hol.cil  hol.ads  lac.tri  lar.bre  lut.ana 
       6        6        7        2        4        4        4        4        2        1        1        1        6        1 
 lut.joc  lut.syn  lyc.bat  mic.fur  not.gra  ocy.chr  oli.pal  opi.ogl  ort.rub  par.bra  pol.vir  pri.are  pri.pun  rac.can 
       1        4        4        1        6        4        5        4        5        1        6        1        5        4 
 rhi.por  sci.pro  sco.bra  sco.cav  sco.reg  sco.plu  sel.cru  sel.vom  sel.bro  spa.axi  spa.fro  sya.mic  sya.pap  syn.foe 
       4        4        4        4        4        2        4        5        5        3        3        1        2        2 
 syn.int  tha.nat  tra.myo tri.letp  ula.lef 
   2        2        2        4        3 

但我真的很难找到一种方法来做到这一点,我再次觉得它可能有一个非常简单和优雅的解决方案。

示例列表:

x = list(c("a", "b"), "c", c("d", "e", "f"))

## make vector
y = rep(seq_along(x), times = sapply(x, length))
## name vector
names(y) = unlist(x)
## verify result
y
# a b c d e f 
# 1 1 2 3 3 3