Making a list

> list1 <- list(matrix(5:8,nrow=2,ncol=2),
+               c(T,F,T,F),
+               "String example",
+               data.frame(X = c(1,2,3), 
+                          Y = c(12,13,10))
+               )
> list1
[[1]]
     [,1] [,2]
[1,]    5    7
[2,]    6    8

[[2]]
[1]  TRUE FALSE  TRUE FALSE

[[3]]
[1] "String example"

[[4]]
  X  Y
1 1 12
2 2 13
3 3 10

See the structure of the list -

> str(list1)
List of 4
 $ : int [1:2, 1:2] 5 6 7 8
 $ : logi [1:4] TRUE FALSE TRUE FALSE
 $ : chr "String example"
 $ :'data.frame':   3 obs. of  2 variables:
  ..$ X: num [1:3] 1 2 3
  ..$ Y: num [1:3] 12 13 10
> class(list1)
[1] "list"
> typeof(list1)
[1] "list"
> mode(list1)
[1] "list"

Number of elements in the list -

> length(list1)
[1] 4

Changing elements name

> names(list1)
NULL
> names(list1) <- c('matrix','logical','string','dataframe')
> names(list1)
[1] "matrix"    "logical"   "string"    "dataframe"

List names can also be defined while making the list:

> list1 <- list(a_matrix = matrix(5:8,nrow=2,ncol=2),
+               a_logical_vector = c(T,F,T,F),
+               a_string = "String example",
+               a_df = data.frame(X = c(1,2,3), Y = c(12,13,10))
+               )
> names(list1)
[1] "a_matrix"         "a_logical_vector" "a_string"         "a_df"            

Selecting element

> list1[[1]]
     [,1] [,2]
[1,]    5    7
[2,]    6    8
> list1[[2]]
[1]  TRUE FALSE  TRUE FALSE
> list1[[4]]
  X  Y
1 1 12
2 2 13
3 3 10

Or,

> list1$a_matrix
     [,1] [,2]
[1,]    5    7
[2,]    6    8
> list1$a_logical_vector
[1]  TRUE FALSE  TRUE FALSE
> list1$a_df
  X  Y
1 1 12
2 2 13
3 3 10

Nesting:

> list1$a_df$Y
[1] 12 13 10

Making new list from existing one

> list2 <- list1[c(2,4)]
> list2
$a_logical_vector
[1]  TRUE FALSE  TRUE FALSE

$a_df
  X  Y
1 1 12
2 2 13
3 3 10

Flatten a list

> unlist(list1)
        a_matrix1         a_matrix2         a_matrix3         a_matrix4 
              "5"               "6"               "7"               "8" 
a_logical_vector1 a_logical_vector2 a_logical_vector3 a_logical_vector4 
           "TRUE"           "FALSE"            "TRUE"           "FALSE" 
         a_string           a_df.X1           a_df.X2           a_df.X3 
 "String example"               "1"               "2"               "3" 
          a_df.Y1           a_df.Y2           a_df.Y3 
             "12"              "13"              "10" 

A Practical Example

> model <- lm(qsec ~ wt, mtcars)
> str(model)
List of 12
 $ coefficients : Named num [1:2] 18.875 -0.319
  ..- attr(*, "names")= chr [1:2] "(Intercept)" "wt"
 $ residuals    : Named num [1:32] -1.579 -0.938 0.475 1.591 -0.758 ...
  ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
 $ effects      : Named num [1:32] -100.968 -1.738 0.811 1.817 -0.559 ...
  ..- attr(*, "names")= chr [1:32] "(Intercept)" "wt" "" "" ...
 $ rank         : int 2
 $ fitted.values: Named num [1:32] 18 18 18.1 17.8 17.8 ...
  ..- attr(*, "names")= chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
 $ assign       : int [1:2] 0 1
 $ qr           :List of 5
  ..$ qr   : num [1:32, 1:2] -5.657 0.177 0.177 0.177 0.177 ...
  .. ..- attr(*, "dimnames")=List of 2
  .. .. ..$ : chr [1:32] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" ...
  .. .. ..$ : chr [1:2] "(Intercept)" "wt"
  .. ..- attr(*, "assign")= int [1:2] 0 1
  ..$ qraux: num [1:2] 1.18 1.05
  ..$ pivot: int [1:2] 1 2
  ..$ tol  : num 1e-07
  ..$ rank : int 2
  ..- attr(*, "class")= chr "qr"
 $ df.residual  : int 30
 $ xlevels      : Named list()
 $ call         : language lm(formula = qsec ~ wt, data = mtcars)
 $ terms        :Classes 'terms', 'formula'  language qsec ~ wt
  .. ..- attr(*, "variables")= language list(qsec, wt)
  .. ..- attr(*, "factors")= int [1:2, 1] 0 1
  .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. ..$ : chr [1:2] "qsec" "wt"
  .. .. .. ..$ : chr "wt"
  .. ..- attr(*, "term.labels")= chr "wt"
  .. ..- attr(*, "order")= int 1
  .. ..- attr(*, "intercept")= int 1
  .. ..- attr(*, "response")= int 1
  .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
  .. ..- attr(*, "predvars")= language list(qsec, wt)
  .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
  .. .. ..- attr(*, "names")= chr [1:2] "qsec" "wt"
 $ model        :'data.frame':  32 obs. of  2 variables:
  ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
  ..$ wt  : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
  ..- attr(*, "terms")=Classes 'terms', 'formula'  language qsec ~ wt
  .. .. ..- attr(*, "variables")= language list(qsec, wt)
  .. .. ..- attr(*, "factors")= int [1:2, 1] 0 1
  .. .. .. ..- attr(*, "dimnames")=List of 2
  .. .. .. .. ..$ : chr [1:2] "qsec" "wt"
  .. .. .. .. ..$ : chr "wt"
  .. .. ..- attr(*, "term.labels")= chr "wt"
  .. .. ..- attr(*, "order")= int 1
  .. .. ..- attr(*, "intercept")= int 1
  .. .. ..- attr(*, "response")= int 1
  .. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> 
  .. .. ..- attr(*, "predvars")= language list(qsec, wt)
  .. .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
  .. .. .. ..- attr(*, "names")= chr [1:2] "qsec" "wt"
 - attr(*, "class")= chr "lm"
> typeof(model)
[1] "list"
> mode(model)
[1] "list"
> class(model)
[1] "lm"

Selecting a list element from the model object -

> model$residuals
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive 
        -1.57932124         -0.93795553          0.47495441          1.59053207 
  Hornet Sportabout             Valiant          Duster 360           Merc 240D 
        -0.75767467          2.44870696         -1.89619411          2.14255504 
           Merc 230            Merc 280           Merc 280C          Merc 450SE 
         5.02979179          0.52232533          1.12232533         -0.17665352 
         Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
        -0.08514112          0.33081294          0.77986227          0.67538240 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla 
         0.25017499          1.29666467          0.16000218          1.61020004 
      Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
         1.92122118         -0.88214817         -0.47927007         -2.24004219 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa 
        -0.59844679          0.64210815         -1.49248020         -1.49254410 
     Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
        -3.36382659         -2.49145906         -3.13619411          0.61173175 
LS0tDQp0aXRsZTogIkxpc3QiDQphdXRob3I6ICJNRCBBSFNBTlVMIElTTEFNIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCi0tLQ0KDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgY29tbWVudCA9ICIiLCBwcm9tcHQgPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRQ0KKQ0KYGBgDQoNCmBgYHtjc3MsIGVjaG89RkFMU0V9DQoucHVsbC1yaWdodCB7DQogICAgZmxvYXQ6IHVuc2V0IWltcG9ydGFudDsNCn0NCmgxLCBoNCB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCmhyew0KICBtYXJnaW46IDJlbSBhdXRvOw0KICBib3JkZXItdG9wOiAycHggc29saWQ7DQp9DQpoMiB7DQogIGNvbG9yOiBibGFjazsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGZvbnQtc2l6ZTogMjJweDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBtYXJnaW4tbGVmdDogYXV0bzsNCiAgbWFyZ2luLXJpZ2h0OiBhdXRvOw0KICB3aWR0aDogOTAlOw0KICBib3JkZXItbGVmdDogOHB4IHNvbGlkIERvZGdlckJsdWU7DQogIGJvcmRlci1yaWdodDogOHB4IHNvbGlkIERvZGdlckJsdWU7DQogIGJvcmRlci1yYWRpdXM6IDdweDsNCiAgbGluZS1oZWlnaHQ6IDJlbTsNCiAgYmFja2dyb3VuZC1jb2xvcjogTGF2ZW5kZXI7DQp9DQouc2Nyb2xsLTIwMCB7DQogIG1heC1oZWlnaHQ6IDIwMHB4Ow0KICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0Ow0KfQ0KYGBgDQoNCi0tLQ0KDQojIyBNYWtpbmcgYSBsaXN0DQoNCmBgYHtyLCBjbGFzcy5vdXRwdXQ9InNjcm9sbC0yMDAifQ0KbGlzdDEgPC0gbGlzdChtYXRyaXgoNTo4LG5yb3c9MixuY29sPTIpLA0KICAgICAgICAgICAgICBjKFQsRixULEYpLA0KICAgICAgICAgICAgICAiU3RyaW5nIGV4YW1wbGUiLA0KICAgICAgICAgICAgICBkYXRhLmZyYW1lKFggPSBjKDEsMiwzKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgWSA9IGMoMTIsMTMsMTApKQ0KICAgICAgICAgICAgICApDQpsaXN0MQ0KYGBgDQoNClNlZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBsaXN0IC0NCmBgYHtyfQ0Kc3RyKGxpc3QxKQ0KYGBgDQoNCmBgYHtyfQ0KY2xhc3MobGlzdDEpDQp0eXBlb2YobGlzdDEpDQptb2RlKGxpc3QxKQ0KYGBgDQoNCk51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCAtIA0KYGBge3J9DQpsZW5ndGgobGlzdDEpDQpgYGANCg0KIyMgQ2hhbmdpbmcgZWxlbWVudHMgbmFtZSAgIA0KDQpgYGB7cn0NCm5hbWVzKGxpc3QxKQ0KbmFtZXMobGlzdDEpIDwtIGMoJ21hdHJpeCcsJ2xvZ2ljYWwnLCdzdHJpbmcnLCdkYXRhZnJhbWUnKQ0KbmFtZXMobGlzdDEpDQpgYGANCg0KTGlzdCBuYW1lcyBjYW4gYWxzbyBiZSBkZWZpbmVkIHdoaWxlIG1ha2luZyB0aGUgbGlzdDoNCmBgYHtyfQ0KbGlzdDEgPC0gbGlzdChhX21hdHJpeCA9IG1hdHJpeCg1OjgsbnJvdz0yLG5jb2w9MiksDQogICAgICAgICAgICAgIGFfbG9naWNhbF92ZWN0b3IgPSBjKFQsRixULEYpLA0KICAgICAgICAgICAgICBhX3N0cmluZyA9ICJTdHJpbmcgZXhhbXBsZSIsDQogICAgICAgICAgICAgIGFfZGYgPSBkYXRhLmZyYW1lKFggPSBjKDEsMiwzKSwgWSA9IGMoMTIsMTMsMTApKQ0KICAgICAgICAgICAgICApDQpuYW1lcyhsaXN0MSkNCmBgYA0KDQojIyBTZWxlY3RpbmcgZWxlbWVudCAgIA0KDQpgYGB7cn0NCmxpc3QxW1sxXV0NCmxpc3QxW1syXV0NCmxpc3QxW1s0XV0NCmBgYA0KDQpPciwNCg0KYGBge3J9DQpsaXN0MSRhX21hdHJpeA0KbGlzdDEkYV9sb2dpY2FsX3ZlY3Rvcg0KbGlzdDEkYV9kZg0KYGBgDQoNCk5lc3Rpbmc6DQoNCmBgYHtyfQ0KbGlzdDEkYV9kZiRZDQpgYGANCg0KIyMgTWFraW5nIG5ldyBsaXN0IGZyb20gZXhpc3Rpbmcgb25lICAgDQoNCmBgYHtyfQ0KbGlzdDIgPC0gbGlzdDFbYygyLDQpXQ0KbGlzdDINCmBgYA0KDQojIyBGbGF0dGVuIGEgbGlzdCAgIA0KDQpgYGB7cn0NCnVubGlzdChsaXN0MSkNCmBgYA0KDQojIyBBIFByYWN0aWNhbCBFeGFtcGxlIA0KDQpgYGB7cn0NCm1vZGVsIDwtIGxtKHFzZWMgfiB3dCwgbXRjYXJzKQ0Kc3RyKG1vZGVsKQ0KdHlwZW9mKG1vZGVsKQ0KbW9kZShtb2RlbCkNCmNsYXNzKG1vZGVsKQ0KYGBgDQoNClNlbGVjdGluZyBhIGxpc3QgZWxlbWVudCBmcm9tIHRoZSBtb2RlbCBvYmplY3QgLQ0KYGBge3J9DQptb2RlbCRyZXNpZHVhbHMNCmBgYA0KDQoNCg0K