Harold Nelson
3/1/2021
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
## ✓ tibble 3.0.6 ✓ dplyr 1.0.4
## ✓ tidyr 1.1.2 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
## To enable
## caching of data, set `options(tigris_use_cache = TRUE)` in your R script or .Rprofile.
Get a counties map from TIGER for Washington and plot it. Use the Base R plot function and ggplot2 with geom_sf()
##
|
| | 0%
|
| | 1%
|
|= | 1%
|
|= | 2%
|
|== | 2%
|
|== | 3%
|
|== | 4%
|
|=== | 4%
|
|=== | 5%
|
|==== | 5%
|
|==== | 6%
|
|===== | 7%
|
|===== | 8%
|
|====== | 8%
|
|====== | 9%
|
|======== | 11%
|
|======== | 12%
|
|========= | 12%
|
|========= | 13%
|
|========== | 15%
|
|=========== | 15%
|
|=========== | 16%
|
|============ | 16%
|
|============ | 17%
|
|============== | 19%
|
|============== | 20%
|
|============== | 21%
|
|=============== | 21%
|
|================ | 23%
|
|================ | 24%
|
|================= | 24%
|
|================= | 25%
|
|================== | 25%
|
|================== | 26%
|
|=================== | 26%
|
|=================== | 27%
|
|==================== | 29%
|
|===================== | 29%
|
|===================== | 30%
|
|===================== | 31%
|
|====================== | 31%
|
|======================= | 33%
|
|======================= | 34%
|
|======================== | 34%
|
|======================== | 35%
|
|========================= | 35%
|
|========================= | 36%
|
|========================== | 36%
|
|========================== | 37%
|
|========================== | 38%
|
|=========================== | 38%
|
|=========================== | 39%
|
|============================ | 39%
|
|============================= | 41%
|
|============================= | 42%
|
|============================== | 42%
|
|============================== | 43%
|
|============================== | 44%
|
|=============================== | 44%
|
|=============================== | 45%
|
|================================= | 46%
|
|================================= | 47%
|
|================================= | 48%
|
|================================== | 48%
|
|=================================== | 50%
|
|=================================== | 51%
|
|==================================== | 51%
|
|==================================== | 52%
|
|===================================== | 52%
|
|====================================== | 54%
|
|====================================== | 55%
|
|======================================= | 55%
|
|======================================= | 56%
|
|======================================== | 57%
|
|========================================= | 59%
|
|========================================== | 59%
|
|========================================== | 60%
|
|========================================== | 61%
|
|=========================================== | 61%
|
|============================================ | 63%
|
|============================================ | 64%
|
|============================================= | 64%
|
|============================================= | 65%
|
|============================================== | 65%
|
|=============================================== | 67%
|
|================================================ | 68%
|
|================================================ | 69%
|
|================================================= | 69%
|
|================================================== | 71%
|
|================================================== | 72%
|
|=================================================== | 72%
|
|=================================================== | 73%
|
|===================================================== | 75%
|
|===================================================== | 76%
|
|====================================================== | 76%
|
|====================================================== | 77%
|
|======================================================= | 79%
|
|======================================================== | 79%
|
|======================================================== | 80%
|
|======================================================== | 81%
|
|========================================================= | 81%
|
|========================================================= | 82%
|
|========================================================== | 82%
|
|=========================================================== | 84%
|
|=========================================================== | 85%
|
|============================================================ | 85%
|
|============================================================ | 86%
|
|============================================================= | 86%
|
|============================================================= | 87%
|
|============================================================= | 88%
|
|=============================================================== | 90%
|
|=============================================================== | 91%
|
|================================================================ | 91%
|
|================================================================ | 92%
|
|================================================================== | 94%
|
|================================================================== | 95%
|
|=================================================================== | 95%
|
|=================================================================== | 96%
|
|==================================================================== | 98%
|
|===================================================================== | 98%
|
|===================================================================== | 99%
|
|======================================================================| 99%
|
|======================================================================| 100%
## Warning: plotting the first 9 out of 17 attributes; use max.plot = 17 to plot
## all
What are the attributes of counties available in wa_counties?
## Rows: 39
## Columns: 18
## $ STATEFP <chr> "53", "53", "53", "53", "53", "53", "53", "53", "53", "53", …
## $ COUNTYFP <chr> "069", "041", "031", "013", "037", "061", "077", "047", "063…
## $ COUNTYNS <chr> "01513275", "01531927", "01531936", "01513273", "01531926", …
## $ GEOID <chr> "53069", "53041", "53031", "53013", "53037", "53061", "53077…
## $ NAME <chr> "Wahkiakum", "Lewis", "Jefferson", "Columbia", "Kittitas", "…
## $ NAMELSAD <chr> "Wahkiakum County", "Lewis County", "Jefferson County", "Col…
## $ LSAD <chr> "06", "06", "06", "06", "06", "06", "06", "06", "06", "06", …
## $ CLASSFP <chr> "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", …
## $ MTFCC <chr> "G4020", "G4020", "G4020", "G4020", "G4020", "G4020", "G4020…
## $ CSAFP <chr> NA, "500", NA, NA, NA, "500", NA, NA, "518", "500", NA, "518…
## $ CBSAFP <chr> NA, "16500", NA, NA, "21260", "42660", "49420", NA, "44060",…
## $ METDIVFP <chr> NA, NA, NA, NA, NA, "42644", NA, NA, NA, NA, NA, NA, NA, NA,…
## $ FUNCSTAT <chr> "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", …
## $ ALAND <dbl> 680962890, 6223179711, 4671624000, 2249624769, 5950002896, 5…
## $ AWATER <dbl> 61582307, 86925423, 995002318, 12561759, 92410114, 282898666…
## $ INTPTLAT <chr> "+46.2946377", "+46.5800714", "+47.8057075", "+46.2928505", …
## $ INTPTLON <chr> "-123.4244583", "-122.3774443", "-123.5270572", "-117.911634…
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((-123.4364 4..., MULTIPOLYGON ((…
The variables worth looking at are ALAND and AWATER, for land and water area respectively.
Use the geom_sf() and map the attribute fill to the variable ALAND. In geom_sf() set “color” to “red”. Use theme_void(). Give the map a title.
wa_counties %>%
ggplot(aes(fill = ALAND)) +
geom_sf(color = "red") +
theme_void() +
ggtitle("Land area of Washington Counties")
Do the same for water area.
wa_counties %>%
ggplot(aes(fill = AWATER)) +
geom_sf(color = "red") +
theme_void() +
ggtitle("Water area of Washington Counties")
Read https://ggplot2.tidyverse.org/reference/ggsf.html and add the names of the counties as labels. Make the names white.
wa_counties %>%
ggplot(aes(fill = AWATER)) +
geom_sf(color = "red") +
theme_void() +
ggtitle("Water area of Washington Counties") +
geom_sf_label(aes(label = NAME),color = "white")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
Get the census tracts in Thurston County as th_tracts. Glimpse the result.
##
|
| | 0%
|
| | 1%
|
|= | 1%
|
|= | 2%
|
|== | 2%
|
|== | 3%
|
|=== | 4%
|
|=== | 5%
|
|==== | 5%
|
|==== | 6%
|
|===== | 7%
|
|===== | 8%
|
|====== | 8%
|
|====== | 9%
|
|======= | 9%
|
|======= | 10%
|
|======== | 11%
|
|======== | 12%
|
|========= | 12%
|
|========= | 13%
|
|========== | 14%
|
|========== | 15%
|
|=========== | 16%
|
|============ | 17%
|
|============= | 18%
|
|============= | 19%
|
|============== | 20%
|
|============== | 21%
|
|=============== | 21%
|
|=============== | 22%
|
|================ | 22%
|
|================ | 23%
|
|================= | 24%
|
|================= | 25%
|
|================== | 25%
|
|================== | 26%
|
|=================== | 27%
|
|=================== | 28%
|
|==================== | 28%
|
|====================== | 31%
|
|====================== | 32%
|
|======================= | 32%
|
|======================= | 33%
|
|======================== | 34%
|
|========================= | 35%
|
|========================= | 36%
|
|========================== | 37%
|
|=========================== | 38%
|
|=========================== | 39%
|
|======================================= | 56%
|
|================================================== | 71%
|
|=================================================== | 73%
|
|==================================================== | 74%
|
|==================================================== | 75%
|
|===================================================== | 75%
|
|===================================================== | 76%
|
|================================================================= | 93%
|
|==================================================================== | 98%
|
|===================================================================== | 98%
|
|===================================================================== | 99%
|
|======================================================================| 100%
## Rows: 50
## Columns: 13
## $ STATEFP <chr> "53", "53", "53", "53", "53", "53", "53", "53", "53", "53", …
## $ COUNTYFP <chr> "067", "067", "067", "067", "067", "067", "067", "067", "067…
## $ TRACTCE <chr> "011710", "011621", "011623", "010510", "012610", "010910", …
## $ GEOID <chr> "53067011710", "53067011621", "53067011623", "53067010510", …
## $ NAME <chr> "117.10", "116.21", "116.23", "105.10", "126.10", "109.10", …
## $ NAMELSAD <chr> "Census Tract 117.10", "Census Tract 116.21", "Census Tract …
## $ MTFCC <chr> "G5020", "G5020", "G5020", "G5020", "G5020", "G5020", "G5020…
## $ FUNCSTAT <chr> "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", …
## $ ALAND <dbl> 9053387, 4525271, 3031352, 2686575, 128450929, 6288860, 2166…
## $ AWATER <dbl> 484781, 94357, 6984, 0, 3317298, 6221, 460169, 631202, 11551…
## $ INTPTLAT <chr> "+47.0021097", "+47.0049320", "+46.9922591", "+47.0417218", …
## $ INTPTLON <chr> "-122.8571915", "-122.8280730", "-122.8142443", "-122.944193…
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((-122.881 47..., MULTIPOLYGON ((…
Create a map of the tracts. Make the boundaries red and use the NAME variable to label the tracts.
th_tracts %>%
ggplot() +
geom_sf(color = "red",fill = "white") +
theme_void() +
ggtitle("Census Tracts of Thurston County")
Get the median value of owner occupied housing, “B25077_001”, by tract in Thurston County in an sf dataframe th_value.
th_value <- get_acs(geography = "tract", state = "WA",
county = "Thurston",
variable = c(Value = "B25077_001"),
geometry = TRUE)
## Getting data from the 2015-2019 5-year ACS
## Downloading feature geometry from the Census website. To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
##
|
| | 0%
|
|===== | 7%
|
|====== | 9%
|
|========= | 13%
|
|======================================================================| 100%
## Rows: 50
## Columns: 6
## $ GEOID <chr> "53067011624", "53067990100", "53067010510", "53067010520", …
## $ NAME <chr> "Census Tract 116.24, Thurston County, Washington", "Census …
## $ variable <chr> "Value", "Value", "Value", "Value", "Value", "Value", "Value…
## $ estimate <dbl> 250000, NA, 23400, 277200, 264000, 309300, 218100, 306400, 3…
## $ moe <dbl> 15633, NA, 14942, 55463, 13133, 19315, 20357, 20339, 24743, …
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((-122.8163 4..., MULTIPOLYGON ((…
Create a choropleth of the housing value variable.
th_value %>%
ggplot(aes(fill = estimate)) +
geom_sf() +
theme_void() +
ggtitle("Median Owner Occupied Housing Value")
## Task 10
Get the water areas of Thurston County from TIGER. Call the result th_water.
##
|
| | 0%
|
|== | 3%
|
|==== | 5%
|
|===== | 8%
|
|================== | 26%
|
|====================== | 32%
|
|============================ | 39%
|
|=============================== | 45%
|
|===================================== | 53%
|
|======================================= | 56%
|
|=========================================== | 61%
|
|=============================================== | 67%
|
|================================================== | 72%
|
|======================================================== | 80%
|
|=============================================================== | 90%
|
|=================================================================== | 96%
|
|===================================================================== | 98%
|
|======================================================================| 100%
## Rows: 562
## Columns: 9
## $ ANSICODE <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ HYDROID <chr> "1105631000337", "110484276872", "110484276371", "1104842768…
## $ FULLNAME <chr> "Puget Sound", NA, "Lk Lois", NA, "Smith Lk", "Long Lk", "Pu…
## $ MTFCC <chr> "H2051", "H2030", "H2030", "H2030", "H2030", "H2030", "H2051…
## $ ALAND <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ AWATER <dbl> 7125498, 697440, 41410, 31359, 79219, 1266099, 7127654, 2137…
## $ INTPTLAT <chr> "+47.1542222", "+47.0035460", "+47.0409583", "+47.1166400", …
## $ INTPTLON <chr> "-122.9063591", "-122.8987900", "-122.7980123", "-122.848174…
## $ geometry <POLYGON [°]> POLYGON ((-122.9261 47.1457..., POLYGON ((-122.8988 …
Creat a map showing the water areas as green.
Overlay the choropleth of housing values with the water map.
th_value %>%
ggplot(aes(fill = estimate)) +
geom_sf() +
geom_sf(data=th_water,fill="green") +
theme_void() +
ggtitle("Median Owner Occupied Housing Value")
Get a choropleth of this variable for congressional districts in the state of Washington.
wa_value <- get_acs(geography = "congressional district", state = "WA",
variable = "B25077_001",
geometry = TRUE)
## Getting data from the 2015-2019 5-year ACS
## Downloading feature geometry from the Census website. To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
##
|
| | 0%
|
|= | 1%
|
|============= | 18%
|
|============= | 19%
|
|============== | 20%
|
|=============== | 21%
|
|=============== | 22%
|
|================ | 23%
|
|================= | 24%
|
|================= | 25%
|
|================== | 26%
|
|=================== | 27%
|
|=================== | 28%
|
|==================== | 28%
|
|==================== | 29%
|
|===================== | 29%
|
|===================== | 30%
|
|====================== | 31%
|
|======================= | 32%
|
|======================= | 33%
|
|======================== | 34%
|
|========================= | 35%
|
|========================= | 36%
|
|========================== | 37%
|
|========================== | 38%
|
|=========================== | 39%
|
|============================ | 40%
|
|============================= | 41%
|
|============================= | 42%
|
|============================== | 43%
|
|============================== | 44%
|
|=============================== | 44%
|
|================================ | 45%
|
|================================ | 46%
|
|================================= | 47%
|
|================================= | 48%
|
|================================== | 48%
|
|================================== | 49%
|
|=================================== | 49%
|
|=================================== | 50%
|
|===================================== | 53%
|
|================================================= | 71%
|
|================================================== | 71%
|
|====================================================== | 77%
|
|====================================================== | 78%
|
|======================================================= | 78%
|
|======================================================= | 79%
|
|======================================================== | 80%
|
|========================================================= | 81%
|
|========================================================= | 82%
|
|========================================================== | 82%
|
|========================================================== | 83%
|
|=========================================================== | 84%
|
|=========================================================== | 85%
|
|============================================================= | 87%
|
|============================================================= | 88%
|
|============================================================== | 89%
|
|================================================================= | 93%
|
|================================================================== | 94%
|
|======================================================================| 100%
wa_value %>%
ggplot(aes(fill = estimate)) +
geom_sf() +
geom_sf_label(aes(label = GEOID),color="white")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## List of 92
## $ line : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ rect : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ text :List of 11
## ..$ family : chr ""
## ..$ face : chr "plain"
## ..$ colour : chr "black"
## ..$ size : num 11
## ..$ hjust : num 0.5
## ..$ vjust : num 0.5
## ..$ angle : num 0
## ..$ lineheight : num 0.9
## ..$ margin : 'margin' num [1:4] 0points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : logi FALSE
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ title : chr "Median Owner Occupied Housing Value"
## $ aspect.ratio : NULL
## $ axis.title : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ axis.title.x : NULL
## $ axis.title.x.top : NULL
## $ axis.title.x.bottom : NULL
## $ axis.title.y : NULL
## $ axis.title.y.left : NULL
## $ axis.title.y.right : NULL
## $ axis.text : list()
## ..- attr(*, "class")= chr [1:2] "element_blank" "element"
## $ axis.text.x : NULL
## $ axis.text.x.top : NULL
## $ axis.text.x.bottom : NULL
## $ axis.text.y : NULL
## $ axis.text.y.left : NULL
## $ axis.text.y.right : NULL
## $ axis.ticks : NULL
## $ axis.ticks.x : NULL
## $ axis.ticks.x.top : NULL
## $ axis.ticks.x.bottom : NULL
## $ axis.ticks.y : NULL
## $ axis.ticks.y.left : NULL
## $ axis.ticks.y.right : NULL
## $ axis.ticks.length : 'simpleUnit' num 0points
## ..- attr(*, "unit")= int 8
## $ axis.ticks.length.x : NULL
## $ axis.ticks.length.x.top : NULL
## $ axis.ticks.length.x.bottom: NULL
## $ axis.ticks.length.y : NULL
## $ axis.ticks.length.y.left : NULL
## $ axis.ticks.length.y.right : NULL
## $ axis.line : NULL
## $ axis.line.x : NULL
## $ axis.line.x.top : NULL
## $ axis.line.x.bottom : NULL
## $ axis.line.y : NULL
## $ axis.line.y.left : NULL
## $ axis.line.y.right : NULL
## $ legend.background : NULL
## $ legend.margin : NULL
## $ legend.spacing : NULL
## $ legend.spacing.x : NULL
## $ legend.spacing.y : NULL
## $ legend.key : NULL
## $ legend.key.size : 'simpleUnit' num 1.2lines
## ..- attr(*, "unit")= int 3
## $ legend.key.height : NULL
## $ legend.key.width : NULL
## $ legend.text :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 0.8
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.text.align : NULL
## $ legend.title :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.title.align : NULL
## $ legend.position : chr "right"
## $ legend.direction : NULL
## $ legend.justification : NULL
## $ legend.box : NULL
## $ legend.box.just : NULL
## $ legend.box.margin : NULL
## $ legend.box.background : NULL
## $ legend.box.spacing : NULL
## $ panel.background : NULL
## $ panel.border : NULL
## $ panel.spacing : 'simpleUnit' num 5.5points
## ..- attr(*, "unit")= int 8
## $ panel.spacing.x : NULL
## $ panel.spacing.y : NULL
## $ panel.grid : NULL
## $ panel.grid.major : NULL
## $ panel.grid.minor : NULL
## $ panel.grid.major.x : NULL
## $ panel.grid.major.y : NULL
## $ panel.grid.minor.x : NULL
## $ panel.grid.minor.y : NULL
## $ panel.ontop : logi FALSE
## $ plot.background : NULL
## $ plot.title :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 1.2
## ..$ hjust : num 0
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 5.5points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.title.position : chr "panel"
## $ plot.subtitle :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : num 0
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 5.5points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.caption :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 0.8
## ..$ hjust : num 1
## ..$ vjust : num 1
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : 'margin' num [1:4] 5.5points 0points 0points 0points
## .. ..- attr(*, "unit")= int 8
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.caption.position : chr "panel"
## $ plot.tag :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 1.2
## ..$ hjust : num 0.5
## ..$ vjust : num 0.5
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ plot.tag.position : chr "topleft"
## $ plot.margin : 'simpleUnit' num [1:4] 0lines 0lines 0lines 0lines
## ..- attr(*, "unit")= int 3
## $ strip.background : NULL
## $ strip.background.x : NULL
## $ strip.background.y : NULL
## $ strip.placement : NULL
## $ strip.text :List of 11
## ..$ family : NULL
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : 'rel' num 0.8
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi TRUE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ strip.text.x : NULL
## $ strip.text.y : NULL
## $ strip.switch.pad.grid : 'simpleUnit' num 2.75points
## ..- attr(*, "unit")= int 8
## $ strip.switch.pad.wrap : 'simpleUnit' num 2.75points
## ..- attr(*, "unit")= int 8
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi TRUE
## - attr(*, "validate")= logi TRUE