在R中将列表(list)转换为向量(vector)

问题:将列表中的所有元素“展平”,赋值给一个向量

解决方案:使用unlist()函数;

在许多情况下需要向量,例如,baseR中的许多统计函数需要一个向量作为输入,例如,如果iq.score是一个包含数值的列表,那么我们不可以直接计算它的平均值。因为mean()函数接受一个向量作为输入,而iq.score是一个列表对象,即

> iq.scores <- list(100, 120, 103, 80, 99)
> mean(iq.scores)
[1] NA
Warning message:
In mean.default(iq.scores) : 参数不是数值也不是逻辑值:回覆NA

使用unlist()将列表对象展开成向量。

> mean(unlist(iq.scores))
[1] 100.4
> unlist(iq.scores)
[1] 100 120 103  80  99
> mean(c(100,120,103, 80,99))

 上面这个例子非常简单,因为这个列表每个元素是由一个数值构成的。

 例子2:列表的每个元素是由向量构成,即

> ex2 <- list(1:100, 101:200, 201:300, 301:400, 401:500)
> mean(unlist(ex2))
[1] 250.5
> unlist(ex2)
  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
 [18]  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34
 [35]  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51
 [52]  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68
 [69]  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85
 [86]  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102
[103] 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
[120] 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
[137] 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
[154] 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
[171] 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
[188] 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
[205] 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
[222] 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
[239] 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
[256] 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
[273] 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
[290] 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
[307] 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
[324] 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
[341] 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
[358] 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
[375] 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
[392] 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
[409] 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425
[426] 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
[443] 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459
[460] 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476
[477] 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493
[494] 494 495 496 497 498 499 500

例3:

列表的每个元素是向量,并且向量的长度相等,就如例2中一样,这样可以将这个列表变成矩阵的形式。

> ex2 <- list(1:100, 101:200, 201:300, 301:400, 401:500)
> matrix(unlist(ex2), nrow=100,ncol=5, byrow=FALSE)
       [,1] [,2] [,3] [,4] [,5]
  [1,]    1  101  201  301  401
  [2,]    2  102  202  302  402
  [3,]    3  103  203  303  403
  [4,]    4  104  204  304  404
  [5,]    5  105  205  305  405
  [6,]    6  106  206  306  406
  [7,]    7  107  207  307  407
  [8,]    8  108  208  308  408
  [9,]    9  109  209  309  409
 [10,]   10  110  210  310  410
 [11,]   11  111  211  311  411
 [12,]   12  112  212  312  412
 [13,]   13  113  213  313  413
 [14,]   14  114  214  314  414
 [15,]   15  115  215  315  415
 [16,]   16  116  216  316  416
 [17,]   17  117  217  317  417
 [18,]   18  118  218  318  418
 [19,]   19  119  219  319  419
 [20,]   20  120  220  320  420
 [21,]   21  121  221  321  421
 [22,]   22  122  222  322  422
 [23,]   23  123  223  323  423
 [24,]   24  124  224  324  424
 [25,]   25  125  225  325  425
 [26,]   26  126  226  326  426
 [27,]   27  127  227  327  427
 [28,]   28  128  228  328  428
 [29,]   29  129  229  329  429
 [30,]   30  130  230  330  430
 [31,]   31  131  231  331  431
 [32,]   32  132  232  332  432
 [33,]   33  133  233  333  433
 [34,]   34  134  234  334  434
 [35,]   35  135  235  335  435
 [36,]   36  136  236  336  436
 [37,]   37  137  237  337  437
 [38,]   38  138  238  338  438
 [39,]   39  139  239  339  439
 [40,]   40  140  240  340  440
 [41,]   41  141  241  341  441
 [42,]   42  142  242  342  442
 [43,]   43  143  243  343  443
 [44,]   44  144  244  344  444
 [45,]   45  145  245  345  445
 [46,]   46  146  246  346  446
 [47,]   47  147  247  347  447
 [48,]   48  148  248  348  448
 [49,]   49  149  249  349  449
 [50,]   50  150  250  350  450
 [51,]   51  151  251  351  451
 [52,]   52  152  252  352  452
 [53,]   53  153  253  353  453
 [54,]   54  154  254  354  454
 [55,]   55  155  255  355  455
 [56,]   56  156  256  356  456
 [57,]   57  157  257  357  457
 [58,]   58  158  258  358  458
 [59,]   59  159  259  359  459
 [60,]   60  160  260  360  460
 [61,]   61  161  261  361  461
 [62,]   62  162  262  362  462
 [63,]   63  163  263  363  463
 [64,]   64  164  264  364  464
 [65,]   65  165  265  365  465
 [66,]   66  166  266  366  466
 [67,]   67  167  267  367  467
 [68,]   68  168  268  368  468
 [69,]   69  169  269  369  469
 [70,]   70  170  270  370  470
 [71,]   71  171  271  371  471
 [72,]   72  172  272  372  472
 [73,]   73  173  273  373  473
 [74,]   74  174  274  374  474
 [75,]   75  175  275  375  475
 [76,]   76  176  276  376  476
 [77,]   77  177  277  377  477
 [78,]   78  178  278  378  478
 [79,]   79  179  279  379  479
 [80,]   80  180  280  380  480
 [81,]   81  181  281  381  481
 [82,]   82  182  282  382  482
 [83,]   83  183  283  383  483
 [84,]   84  184  284  384  484
 [85,]   85  185  285  385  485
 [86,]   86  186  286  386  486
 [87,]   87  187  287  387  487
 [88,]   88  188  288  388  488
 [89,]   89  189  289  389  489
 [90,]   90  190  290  390  490
 [91,]   91  191  291  391  491
 [92,]   92  192  292  392  492
 [93,]   93  193  293  393  493
 [94,]   94  194  294  394  494
 [95,]   95  195  295  395  495
 [96,]   96  196  296  396  496
 [97,]   97  197  297  397  497
 [98,]   98  198  298  398  498
 [99,]   99  199  299  399  499
[100,]  100  200  300  400  500

参考:

《R语言经典实例(原书第2版)》(2020年5月出版, 机工社)(这本书写的很好,对于初学者很友好,推荐)