从一个列表中提取多个元素 lapply

4
我有一个结构如下的列表,我试图提取特定元素并将它们存储到数据框中:data.frame
我已经尝试了以下方法:
lapply(rmseErrorsHyperparameters, '[[', 2)

这段代码提取了6个列表中的第二个元素,但我想要提取元素1, 2, 8, 9, 10, 11, 12并将它们存储在data.frame中。如何使用lapply从多个列表中提取不止一个元素?我想避免使用for loop,但我已经开发出了一些有点能用的东西。
List of 6
 $ :List of 12
  ..$               : num 0.954
  ..$               : num 0.902
  ..$ iter          : num [1:50] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ train_auc_mean: num [1:50] 0.901 0.925 0.933 0.938 0.94 ...
  ..$ train_auc_std : num [1:50] 0.00131 0.00144 0.00145 0.00117 0.00102 ...
  ..$ test_auc_mean : num [1:50] 0.845 0.873 0.883 0.887 0.89 ...
  ..$ test_auc_std  : num [1:50] 0.00535 0.00511 0.00501 0.00306 0.00208 ...
  ..$               : num 0.6
  ..$               : num 1
  ..$               : num 8
  ..$               : num 0.01
  ..$               : num 1
 $ :List of 12
  ..$               : num 0.975
  ..$               : num 0.902
  ..$ iter          : num [1:50] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ train_auc_mean: num [1:50] 0.912 0.943 0.953 0.958 0.961 ...
  ..$ train_auc_std : num [1:50] 0.000313 0.001633 0.002154 0.001437 0.000988 ...
  ..$ test_auc_mean : num [1:50] 0.84 0.868 0.877 0.882 0.886 ...
  ..$ test_auc_std  : num [1:50] 0.00759 0.00568 0.00606 0.0046 0.00521 ...
  ..$               : num 0.6
  ..$               : num 1
  ..$               : num 10
  ..$               : num 0.01
  ..$               : num 1
 $ :List of 12
  ..$               : num 0.986
  ..$               : num 0.901
  ..$ iter          : num [1:50] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ train_auc_mean: num [1:50] 0.923 0.954 0.966 0.972 0.975 ...
  ..$ train_auc_std : num [1:50] 0.003373 0.000954 0.001237 0.001268 0.001385 ...
  ..$ test_auc_mean : num [1:50] 0.843 0.86 0.869 0.876 0.879 ...
  ..$ test_auc_std  : num [1:50] 0.00781 0.00558 0.00437 0.00446 0.00336 ...
  ..$               : num 0.6
  ..$               : num 1
  ..$               : num 12
  ..$               : num 0.01
  ..$               : num 1
 $ :List of 12
  ..$               : num 0.97
  ..$               : num 0.905
  ..$ iter          : num [1:50] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ train_auc_mean: num [1:50] 0.904 0.927 0.934 0.939 0.942 ...
  ..$ train_auc_std : num [1:50] 0.00317 0.001007 0.000483 0.000321 0.000634 ...
  ..$ test_auc_mean : num [1:50] 0.851 0.874 0.882 0.886 0.889 ...
  ..$ test_auc_std  : num [1:50] 0.00441 0.00469 0.00314 0.0021 0.00211 ...
  ..$               : num 0.6
  ..$               : num 1
  ..$               : num 8
  ..$               : num 0.05
  ..$               : num 1
 $ :List of 12
  ..$               : num 0.986
  ..$               : num 0.905
  ..$ iter          : num [1:50] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ train_auc_mean: num [1:50] 0.914 0.942 0.954 0.959 0.962 ...
  ..$ train_auc_std : num [1:50] 0.002 0.0025 0.00183 0.00163 0.00165 ...
  ..$ test_auc_mean : num [1:50] 0.839 0.864 0.876 0.883 0.886 ...
  ..$ test_auc_std  : num [1:50] 0.01109 0.00491 0.00341 0.00583 0.00588 ...
  ..$               : num 0.6
  ..$               : num 1
  ..$               : num 10
  ..$               : num 0.05
  ..$               : num 1
 $ :List of 12
  ..$               : num 0.994
  ..$               : num 0.903
  ..$ iter          : num [1:50] 1 2 3 4 5 6 7 8 9 10 ...
  ..$ train_auc_mean: num [1:50] 0.926 0.955 0.966 0.972 0.975 ...
  ..$ train_auc_std : num [1:50] 0.001425 0.001578 0.001289 0.000388 0.000585 ...
  ..$ test_auc_mean : num [1:50] 0.849 0.863 0.87 0.873 0.877 ...
  ..$ test_auc_std  : num [1:50] 0.00396 0.00246 0.00168 0.00206 0.00385 ...
  ..$               : num 0.6
  ..$               : num 1
  ..$               : num 12
  ..$               : num 0.05
  ..$               : num 1

编辑:可重现的数据(列出3个)

rmseErrorsHyperparameters <- list(structure(list(0.953720666666667, 0.902024666666667, iter = c(1, 
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50), 
    train_auc_mean = c(0.900847, 0.925322, 0.933217666666667, 
    0.937899, 0.939881666666667, 0.941533, 0.943171, 0.944086333333333, 
    0.945105666666667, 0.945499333333333, 0.946013666666667, 
    0.946487333333333, 0.946805666666667, 0.947391666666667, 
    0.947904333333333, 0.948171, 0.948372, 0.948775666666667, 
    0.948961666666667, 0.949089666666667, 0.949282333333333, 
    0.949515333333333, 0.949729, 0.949931666666667, 0.950214, 
    0.950408333333333, 0.950526666666667, 0.950741666666667, 
    0.950901666666667, 0.950974333333333, 0.951204, 0.951391666666667, 
    0.951527, 0.951700333333333, 0.951852, 0.952065333333333, 
    0.952297666666667, 0.952352, 0.952467333333333, 0.952607333333333, 
    0.952758666666667, 0.952874, 0.952989666666667, 0.953099, 
    0.953177, 0.953303, 0.953435666666667, 0.953522666666667, 
    0.953621333333333, 0.953720666666667), train_auc_std = c(0.00130656368645379, 
    0.00143715204484666, 0.00145437668974947, 0.00116715066148399, 
    0.00102135215386405, 0.001040216644081, 0.0007501413200906, 
    0.000618024990456225, 0.000168056207610585, 0.00019217064197146, 
    0.000233129911495223, 0.000173805126926522, 7.24998085186385e-05, 
    0.000123259437557184, 0.000248668900857652, 0.000305493043992923, 
    0.000298051449809956, 0.000179232313412644, 0.000124408824327376, 
    0.000134566795183772, 0.000157286009986242, 7.76587979522523e-05, 
    9.5502181474364e-05, 0.00013903556699497, 0.000224861438935649, 
    0.000285930449998958, 0.000182870324645041, 5.62751176121424e-05, 
    6.70339878544736e-05, 0.000111263451334427, 1.09848344472199e-05, 
    5.10968585089493e-05, 0.000127061664571189, 0.000117033708158539, 
    0.000134484199517734, 0.000169881004335806, 0.00021561745941684, 
    0.000234644411689244, 0.000201337748188569, 0.000224707711391871, 
    0.00026645866894705, 0.000273621393006271, 0.000260636826814431, 
    0.000249801254268023, 0.000224385085443034, 0.000239233498084936, 
    0.000256416761282853, 0.000208327199841609, 0.000186449874201443, 
    0.000216847616553611), test_auc_mean = c(0.845180666666667, 
    0.87289, 0.883417666666667, 0.887464666666667, 0.889638, 
    0.891677, 0.893395666666667, 0.894677333333333, 0.895722666666667, 
    0.896079, 0.896685, 0.896954333333333, 0.897179333333333, 
    0.897862666666667, 0.898327, 0.898347666666667, 0.898519333333333, 
    0.898593, 0.898538666666667, 0.898881666666667, 0.898930666666667, 
    0.899154333333333, 0.899579666666667, 0.899588, 0.899621333333333, 
    0.899769666666667, 0.899889666666667, 0.900123, 0.900287, 
    0.900304333333333, 0.900334666666667, 0.900528333333333, 
    0.900673666666667, 0.900678333333333, 0.900742333333333, 
    0.900915, 0.901075333333333, 0.901172333333333, 0.901321333333333, 
    0.901251333333333, 0.901353, 0.901381333333333, 0.901401, 
    0.901458, 0.901524666666667, 0.901552333333333, 0.901666666666667, 
    0.901805666666667, 0.901894, 0.902024666666667), test_auc_std = c(0.00535254016538604, 
    0.00511385379794535, 0.00501275388937997, 0.00306479910522722, 
    0.00208109314221795, 0.00151193672708684, 0.00143246555125691, 
    0.00100637843557957, 0.00036190268781201, 0.000684047269396669, 
    0.000621566301042722, 0.0007523852441313, 0.000674434248569293, 
    0.000752687776439935, 0.000509961436560729, 0.000478554304392661, 
    8.21150948539223e-05, 0.000212886511230659, 0.000373224091013035, 
    0.000335336978012916, 0.000367374770830242, 0.000633420520210611, 
    0.000737041081249695, 0.000772994609763243, 0.000701223850790312, 
    0.000501746505144178, 0.000606038686051581, 0.000588715551018228, 
    0.000605050411180606, 0.000650917472167923, 0.000616455098897498, 
    0.000625198812707968, 0.000578552407945548, 0.000428446288608862, 
    0.00042560257930436, 0.000474561552082954, 0.000409679820873963, 
    0.000426660156156889, 0.000471251053651073, 0.000381387234040574, 
    0.000315255451951873, 0.000370166028862919, 0.000412830070046719, 
    0.000421547150523875, 0.000365637647015328, 0.000317595479881825, 
    0.000192721445350103, 0.000167464092834192, 0.000256383827013595, 
    0.000181586220406805), 0.6, 1, 8, 0.01, 1), .Names = c("", 
"", "iter", "train_auc_mean", "train_auc_std", "test_auc_mean", 
"test_auc_std", "", "", "", "", "")), structure(list(0.975268, 
    0.901870333333333, iter = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
    11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 
    26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50), train_auc_mean = c(0.912264666666667, 
    0.942682666666667, 0.952919, 0.958222666666667, 0.960905, 
    0.963486333333333, 0.965091666666667, 0.965947333333333, 
    0.966826333333333, 0.967171666666667, 0.967852666666667, 
    0.968435333333333, 0.968922, 0.969134333333333, 0.969464666666667, 
    0.969697333333333, 0.970073, 0.970447, 0.970762333333333, 
    0.971054666666667, 0.971248, 0.971411, 0.971652333333333, 
    0.971839, 0.972016333333333, 0.972202, 0.972350333333333, 
    0.972558666666667, 0.972722666666667, 0.97275, 0.972899666666667, 
    0.972997666666667, 0.973106, 0.973184333333333, 0.973336333333333, 
    0.973449333333333, 0.973583666666667, 0.973719333333333, 
    0.973850666666667, 0.973977333333333, 0.974069, 0.974235, 
    0.974314666666667, 0.974482333333333, 0.974656333333333, 
    0.974724, 0.974813666666667, 0.974968333333333, 0.975138, 
    0.975268), train_auc_std = c(0.000312523421413819, 0.00163300466080798, 
    0.00215415923276346, 0.00143686564746747, 0.000987835343895248, 
    0.000740839313828873, 0.000590160053579232, 0.000531158691338602, 
    0.000400213554100089, 0.000395944721146784, 0.000502126367505942, 
    0.000558918201231462, 0.00061777396080374, 0.000516518043078283, 
    0.000497374663180272, 0.000516479320807822, 0.000573073002965596, 
    0.000592873229897056, 0.000610993362522018, 0.000455199101812945, 
    0.000518113887057779, 0.000503710895862012, 0.00048072815145692, 
    0.000556014987727594, 0.000555037736453781, 0.000476013305074048, 
    0.000467980294007687, 0.000450111344174371, 0.000455757489193164, 
    0.000493982455767807, 0.000491010070079461, 0.000503931432797898, 
    0.000545345761802356, 0.000593822270511266, 0.000632249599016631, 
    0.00066811642372566, 0.000654601320529102, 0.000729151256981975, 
    0.000694328132568313, 0.000653733040986669, 0.00057399883845651, 
    0.000542584555704569, 0.000551232759977503, 0.000475593897583828, 
    0.000506544722148041, 0.000482199820185887, 0.00050983156254615, 
    0.00044949922763234, 0.000440036362121999, 0.000444879758898845
    ), test_auc_mean = c(0.840288666666667, 0.867739666666667, 
    0.877456666666667, 0.882060666666667, 0.886183333333333, 
    0.889353333333333, 0.890635333333333, 0.891669, 0.893135333333333, 
    0.894148333333333, 0.894897333333333, 0.895717666666667, 
    0.896058, 0.896280666666667, 0.897029666666667, 0.897502, 
    0.898419333333333, 0.898818, 0.899138, 0.899278, 0.899156666666667, 
    0.899033, 0.899243333333333, 0.899451, 0.899592, 0.899672, 
    0.899825333333333, 0.89999, 0.900022666666667, 0.900159, 
    0.900148333333333, 0.900116333333333, 0.90006, 0.900287333333333, 
    0.900309666666667, 0.900404666666667, 0.900544, 0.900621, 
    0.900719, 0.900891666666667, 0.900977333333333, 0.901158333333333, 
    0.901193, 0.901216, 0.901379, 0.901473333333333, 0.901467333333333, 
    0.901642333333333, 0.901744666666667, 0.901870333333333), 
    test_auc_std = c(0.00759260861335601, 0.00568159281265906, 
    0.00606058711860765, 0.00460208954956346, 0.00521032131659716, 
    0.00481223955717371, 0.00534758714022542, 0.00501373320657221, 
    0.00522332437779054, 0.00501053831661823, 0.00451862665960563, 
    0.00418734795412832, 0.00410454244302279, 0.00429008953547065, 
    0.00422526151721584, 0.00361363169124975, 0.00343218456509149, 
    0.00341489131111607, 0.00340684086314736, 0.00321947697616025, 
    0.00324716864701969, 0.00334518350269685, 0.00344358556674244, 
    0.00342422438906803, 0.00356062503875735, 0.00340558139921157, 
    0.00352248599080419, 0.00385032007328738, 0.00374789294877404, 
    0.00361234559070411, 0.00348531073060053, 0.00356376957106013, 
    0.0035993061368398, 0.00373900720632646, 0.00371955645502605, 
    0.00380335854506354, 0.00387487599801613, 0.0039907811265388, 
    0.00389362924102362, 0.00384625899052781, 0.00389013533041259, 
    0.00389418389682193, 0.00389682751308114, 0.00379974007883679, 
    0.00366813304011136, 0.00370570383179282, 0.00362881296782636, 
    0.00360245928344571, 0.00361596500105378, 0.00364297473075583
    ), 0.6, 1, 10, 0.01, 1), .Names = c("", "", "iter", "train_auc_mean", 
"train_auc_std", "test_auc_mean", "test_auc_std", "", "", "", 
"", "")), structure(list(0.986081666666667, 0.900759666666667, 
    iter = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 
    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 
    31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 
    46, 47, 48, 49, 50), train_auc_mean = c(0.923201, 0.954012333333333, 
    0.965886333333333, 0.971817, 0.974798666666667, 0.976513333333333, 
    0.977855, 0.978818333333333, 0.979569333333333, 0.980097333333333, 
    0.980647, 0.981069666666667, 0.981384666666667, 0.981701, 
    0.982039333333333, 0.982191333333333, 0.982358333333333, 
    0.982601333333333, 0.982685666666667, 0.9829, 0.983054, 0.983189333333333, 
    0.983413333333333, 0.983520333333333, 0.983686666666667, 
    0.983874, 0.983958, 0.984078, 0.984192666666667, 0.984329, 
    0.984459333333333, 0.984518666666667, 0.984593666666667, 
    0.984693, 0.984787333333333, 0.984954666666667, 0.985048, 
    0.985093333333333, 0.985226666666667, 0.985373333333333, 
    0.985467, 0.985548666666667, 0.985613666666667, 0.985690333333333, 
    0.985754, 0.985816333333333, 0.985909, 0.985974333333333, 
    0.986022333333333, 0.986081666666667), train_auc_std = c(0.00337309778494156, 
    0.000954287284910768, 0.0012374032846389, 0.00126758457967465, 
    0.00138491740626589, 0.00102724042401721, 0.000771585812833018, 
    0.000698051733226662, 0.000890334893357128, 0.00078296459408162, 
    0.000696192980798405, 0.000467354493004126, 0.000437151638986949, 
    0.000300297629917649, 0.000198387387572796, 0.00020618653902695, 
    0.000126053780428038, 6.11137378472788e-05, 0.000122077388618434, 
    0.000149915531827955, 0.000131128436281003, 6.64646939629599e-05, 
    3.4586445789937e-05, 9.98743656543275e-05, 5.25758717997502e-05, 
    4.49221547717202e-05, 7.06021719171553e-05, 0.000131562405766592, 
    0.000103383858489548, 0.00012749117630173, 0.000158817155523642, 
    0.000150652654626341, 0.000160221374192249, 0.000183913023346036, 
    0.000255586036891089, 0.000294926356273579, 0.000271003074917812, 
    0.000224226571690963, 0.000255097802659949, 0.000255781590719397, 
    0.00028218551835888, 0.000257345854780765, 0.000257793630023705, 
    0.000310502102453261, 0.000299081928512292, 0.000305442120417927, 
    0.000282902810136112, 0.00032793122604585, 0.000332190039425057, 
    0.000350280205397519), test_auc_mean = c(0.843174, 0.859809333333333, 
    0.869149333333333, 0.875715, 0.879178, 0.882710333333333, 
    0.886139333333333, 0.887976, 0.888797666666667, 0.889788666666667, 
    0.89116, 0.892295666666667, 0.892904, 0.894294666666667, 
    0.895059333333333, 0.895289666666667, 0.896086666666667, 
    0.896733666666667, 0.897034, 0.897060333333333, 0.897346, 
    0.897755333333333, 0.897992666666667, 0.898205666666667, 
    0.898316333333333, 0.898394, 0.898278, 0.898530333333333, 
    0.898679, 0.898785, 0.899067, 0.899207666666667, 0.899292333333333, 
    0.899407666666667, 0.899604333333333, 0.899572333333333, 
    0.899580333333333, 0.899621, 0.899837666666667, 0.899916666666667, 
    0.900063, 0.900063666666667, 0.900242333333333, 0.900228, 
    0.900354, 0.900414333333333, 0.900434666666667, 0.900585666666667, 
    0.900673333333333, 0.900759666666667), test_auc_std = c(0.00781032397962867, 
    0.00558142014982742, 0.00437170266856225, 0.00445832053579263, 
    0.00335766952910974, 0.00302967394652508, 0.00297926001251079, 
    0.0023165677197148, 0.00211109155543872, 0.00291545494828301, 
    0.0025451626012121, 0.00221365856043241, 0.00264927612754718, 
    0.00302930314684934, 0.00277626395639074, 0.00261654636666304, 
    0.00266086030365632, 0.00289149065746182, 0.00287223583061064, 
    0.00270794649544151, 0.0024064273657694, 0.0026355839749263, 
    0.0021243697627431, 0.00222863251543668, 0.00228707095550478, 
    0.00246482629541952, 0.00231653016384161, 0.00227557206482534, 
    0.0022149583893877, 0.00221580429339538, 0.00199851211318163, 
    0.00176533931270203, 0.00168137747758829, 0.00146439892867653, 
    0.00173191249458254, 0.00161898164155395, 0.00142086413457795, 
    0.00151745115244377, 0.00156981449722054, 0.00150160366130567, 
    0.00133433803810075, 0.00124110712221691, 0.00129816930925153, 
    0.00123114282948807, 0.0012993701038096, 0.00133719141824208, 
    0.00133604125017374, 0.00112592046300703, 0.00100684601048679, 
    0.00108474031714288), 0.6, 1, 12, 0.01, 1), .Names = c("", 
"", "iter", "train_auc_mean", "train_auc_std", "test_auc_mean", 
"test_auc_std", "", "", "", "", "")))

lapply(rmseErrorsHyperparameters, '[', c(1:2, 8:12))这个怎么样?当寻求帮助时,你应该包含一个简单的可复现示例,其中包含样本输入和期望输出,以便用于测试和验证可能的解决方案。str()不如dput()有帮助。 - MrFlick
我正在处理一个 dput(),但列表太长了,无法在StackExchange上发布。我将列表缩减到3个大小。 - user113156
这给了我40个变量的1个观察结果,因此它将变量保存在一个数据框中,但我正在尝试创建新行。testt <- lapply(rmseErrorsHyperparameters, '[', c(1:2, 8:12)) testt <- as.data.frame(testt) - user113156
好的,现在我已经添加了一个长度为3的列表。 - user113156
2个回答

3
作为附注,在使用Dplyr(v0.8.3)时,您还可以执行以下操作:
data <- bind_rows(
             lapply(rmseErrorsHyperparameters, '[', c(1:2, 8:12))

2

您可以使用

data <- do.call("rbind", lapply(rmseErrorsHyperparameters, '[', c(1:2, 8:12)))

将所有数据收集到一个data.frame中。 lapply 将提取列表项,do.call("rbind", ...) 将它们全部加入到同一个data.frame中。


3
直接使用sapply怎么样? sapply(rmseErrorsHyperparameters, '[', c(1:2, 8:12)) - Lerong
谢谢,这正是我在寻找的。 - user113156
两种方法都很好,使用sapply时,我只需要转置数据以获得相同的格式,即t(data)。感谢你们俩! - user113156
这将返回一个矩阵和列表数组的对象,而不是数据框。应该是: data <- do.call("rbind.data.frame", lapply(rmseErrorsHyperparameters, '[', c(1:2, 8:12))) - ramen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接