在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月出版, 机工社)(这本书写的很好,对于初学者很友好,推荐)