<!DOCTYPE html>
Install the present package and use its core functions
remotes::install_github('inrae/diades.atlas')
library(dplyr)
library(DBI)
library(ggplot2)
library(RPostgres)
library(diades.atlas)
# pkgload::load_all()
You can use this package without opening the Shiny application
se <- new.env()
conn_eurodiad <- dbConnect(
RPostgres::Postgres(),
dbname = 'eurodiad',
host = '<your-host>',
port = 5432,
user = '<your-username>',
password = rstudioapi::askForPassword("Database password"))
session$userData$con <-conn_eurodiad
# For ThinkR only
se <- new.env()
conn_eurodiad <- connect(session = se)
DBI::dbListTables(conn_eurodiad)
## [1] "abundance_level"
## [2] "basin"
## [3] "basin_outlet"
## [4] "casestudy_basin"
## [5] "category"
## [6] "cices"
## [7] "climatic_model"
## [8] "hydiadparameter"
## [9] "ices_area"
## [10] "ices_grass"
## [11] "ices_rectangle"
## [12] "iucn_classification"
## [13] "iucn_level"
## [14] "lang85_85"
## [15] "species"
## [16] "species_rectangle"
## [17] "v_abundance"
## [18] "v_maxvalue_es"
## [19] "v_hybrid_model"
## [20] "v_hybrid_model_mavg"
## [21] "v_ices_geom"
## [22] "v_occurence"
## [23] "v_species_ices_occurence"
## [24] "abundance"
## [25] "casestudy"
## [26] "ecosystemic_services"
## [27] "esvalue"
## [28] "hybrid_model_result"
## [29] "locale"
## [30] "outlet_distance"
## [31] "species_division"
## [32] "species_iucn"
## [33] "subcategory"
## [34] "v_basin"
## [35] "v_ecosystemic_services"
## [36] "v_iucn"
It is recommended to use tbl()
instead of dbGetQuery()
to connect to a table in the database.tbl()
does not download the table, it only connect to the database and let it run the query. This means that if you run a filter()
or a mutate()
after that, the database executes it, not R, which is more efficient.
However, at some point, some of your {tidyverse} operations can not be realised or translated in SQL, hence, you need to download the resulting dataset using collect()
. Then you can continue as usual.
For instance.
dbGetQuery()
download data in R
filter()
is executed by R in your R session
# Create a function
get_data_dbi <- function(conn_eurodiad, species_id, scenario) {
query <- "SELECT * FROM diadesatlas.v_hybrid_model"
dbGetQuery(conn_eurodiad, query) %>%
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario)
}
# Use it
get_data_dbi(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85')
## hybrid_model_result_id basin_id species_id
## 1 1395745 1 6
## 2 1395746 1 6
## 3 1395747 1 6
## 4 1395748 1 6
## 5 1395749 1 6
## 6 1395750 1 6
## 7 1395751 1 6
## 8 1395752 1 6
## 9 1395753 1 6
## 10 1395754 1 6
## 11 1395755 1 6
## 12 1395756 1 6
## 13 1395757 1 6
## 14 1395758 1 6
## 15 1395759 1 6
## 16 1395760 1 6
## 17 1395761 1 6
## 18 1395762 1 6
## 19 1395763 1 6
## 20 1395764 1 6
## 21 1395765 1 6
## 22 1395766 1 6
## 23 1395767 1 6
## 24 1395768 1 6
## 25 1395769 1 6
## 26 1395770 1 6
## 27 1395771 1 6
## 28 1395772 1 6
## 29 1395773 1 6
## 30 1395774 1 6
## 31 1395775 1 6
## 32 1395776 1 6
## 33 1395777 1 6
## 34 1395778 1 6
## 35 1395779 1 6
## 36 1395780 1 6
## 37 1395781 1 6
## 38 1395782 1 6
## 39 1395783 1 6
## 40 1395784 1 6
## 41 1395785 1 6
## 42 1395786 1 6
## 43 1395787 1 6
## 44 1395788 1 6
## 45 1395789 1 6
## 46 1395790 1 6
## 47 1395791 1 6
## 48 1395792 1 6
## 49 1395793 1 6
## 50 1395794 1 6
## 51 1395795 1 6
## 52 1395796 1 6
## 53 1395797 1 6
## 54 1395798 1 6
## 55 1395799 1 6
## 56 1395800 1 6
## 57 1395801 1 6
## 58 1395802 1 6
## climatic_model_id year nit hsi
## 1 2 1951 568.905820 0.24424759
## 2 2 1952 485.922085 0.32226324
## 3 2 1953 429.942259 0.19459266
## 4 2 1954 383.999570 0.24571498
## 5 2 1955 297.920901 0.08498220
## 6 2 1956 208.892845 0.23510293
## 7 2 1957 140.493131 0.32735810
## 8 2 1958 100.724190 0.41504563
## 9 2 1959 66.924378 0.24550794
## 10 2 1960 36.807523 0.37964568
## 11 2 1961 15.134462 0.27040872
## 12 2 1962 5.429765 0.24577305
## 13 2 1963 0.000000 0.22412295
## 14 2 1964 0.000000 0.25041559
## 15 2 1965 0.000000 0.32038514
## 16 2 1966 0.000000 0.25260188
## 17 2 1967 0.000000 0.36233798
## 18 2 1968 0.000000 0.26426540
## 19 2 1969 0.000000 0.32815258
## 20 2 1970 0.000000 0.07997118
## 21 2 1971 0.000000 0.32295007
## 22 2 1972 0.000000 0.26076233
## 23 2 1973 0.000000 0.32594177
## 24 2 1974 0.000000 0.32919022
## 25 2 1975 0.000000 0.33330411
## 26 2 1976 0.000000 0.07650311
## 27 2 1977 0.000000 0.12106809
## 28 2 1978 0.000000 0.24494783
## 29 2 1979 0.000000 0.26687631
## 30 2 1980 0.000000 0.24788790
## 31 2 1981 0.000000 0.25248367
## 32 2 1982 0.000000 0.05853723
## 33 2 1983 0.000000 0.43384268
## 34 2 1984 0.000000 0.24605194
## 35 2 1985 0.000000 0.32409335
## 36 2 1986 0.000000 0.30049253
## 37 2 1987 0.000000 0.31984017
## 38 2 1988 0.000000 0.24944539
## 39 2 1989 0.000000 0.26567151
## 40 2 1990 0.000000 0.23825317
## 41 2 1991 0.000000 0.32738422
## 42 2 1992 0.000000 0.32538706
## 43 2 1993 0.000000 0.31455448
## 44 2 1994 0.000000 0.25445784
## 45 2 1995 0.000000 0.32881698
## 46 2 1996 0.000000 0.40264379
## 47 2 1997 0.000000 0.32566102
## 48 2 1998 0.000000 0.35783520
## 49 2 1999 0.000000 0.37290455
## 50 2 2000 0.000000 0.33744471
## 51 2 2001 0.000000 0.26335707
## 52 2 2002 0.000000 0.17640363
## 53 2 2003 0.000000 0.35140068
## 54 2 2004 0.000000 0.29239221
## 55 2 2005 0.000000 0.18490081
## 56 2 2006 0.000000 0.25068678
## 57 2 2007 0.000000 0.25083582
## 58 2 2008 0.000000 0.12043068
## saturation_rate climatic_scenario
## 1 0.269749152 rcp85
## 2 0.174624776 rcp85
## 3 0.255878434 rcp85
## 4 0.180987713 rcp85
## 5 0.405997180 rcp85
## 6 0.102900033 rcp85
## 7 0.049702931 rcp85
## 8 0.028105281 rcp85
## 9 0.031569580 rcp85
## 10 0.011228148 rcp85
## 11 0.006481810 rcp85
## 12 0.002558567 rcp85
## 13 0.000000000 rcp85
## 14 0.000000000 rcp85
## 15 0.000000000 rcp85
## 16 0.000000000 rcp85
## 17 0.000000000 rcp85
## 18 0.000000000 rcp85
## 19 0.000000000 rcp85
## 20 0.000000000 rcp85
## 21 0.000000000 rcp85
## 22 0.000000000 rcp85
## 23 0.000000000 rcp85
## 24 0.000000000 rcp85
## 25 0.000000000 rcp85
## 26 0.000000000 rcp85
## 27 0.000000000 rcp85
## 28 0.000000000 rcp85
## 29 0.000000000 rcp85
## 30 0.000000000 rcp85
## 31 0.000000000 rcp85
## 32 0.000000000 rcp85
## 33 0.000000000 rcp85
## 34 0.000000000 rcp85
## 35 0.000000000 rcp85
## 36 0.000000000 rcp85
## 37 0.000000000 rcp85
## 38 0.000000000 rcp85
## 39 0.000000000 rcp85
## 40 0.000000000 rcp85
## 41 0.000000000 rcp85
## 42 0.000000000 rcp85
## 43 0.000000000 rcp85
## 44 0.000000000 rcp85
## 45 0.000000000 rcp85
## 46 0.000000000 rcp85
## 47 0.000000000 rcp85
## 48 0.000000000 rcp85
## 49 0.000000000 rcp85
## 50 0.000000000 rcp85
## 51 0.000000000 rcp85
## 52 0.000000000 rcp85
## 53 0.000000000 rcp85
## 54 0.000000000 rcp85
## 55 0.000000000 rcp85
## 56 0.000000000 rcp85
## 57 0.000000000 rcp85
## 58 0.000000000 rcp85
## climatic_model_code oceanic_model
## 1 cnrmcm5 CNRM-CM5
## 2 cnrmcm5 CNRM-CM5
## 3 cnrmcm5 CNRM-CM5
## 4 cnrmcm5 CNRM-CM5
## 5 cnrmcm5 CNRM-CM5
## 6 cnrmcm5 CNRM-CM5
## 7 cnrmcm5 CNRM-CM5
## 8 cnrmcm5 CNRM-CM5
## 9 cnrmcm5 CNRM-CM5
## 10 cnrmcm5 CNRM-CM5
## 11 cnrmcm5 CNRM-CM5
## 12 cnrmcm5 CNRM-CM5
## 13 cnrmcm5 CNRM-CM5
## 14 cnrmcm5 CNRM-CM5
## 15 cnrmcm5 CNRM-CM5
## 16 cnrmcm5 CNRM-CM5
## 17 cnrmcm5 CNRM-CM5
## 18 cnrmcm5 CNRM-CM5
## 19 cnrmcm5 CNRM-CM5
## 20 cnrmcm5 CNRM-CM5
## 21 cnrmcm5 CNRM-CM5
## 22 cnrmcm5 CNRM-CM5
## 23 cnrmcm5 CNRM-CM5
## 24 cnrmcm5 CNRM-CM5
## 25 cnrmcm5 CNRM-CM5
## 26 cnrmcm5 CNRM-CM5
## 27 cnrmcm5 CNRM-CM5
## 28 cnrmcm5 CNRM-CM5
## 29 cnrmcm5 CNRM-CM5
## 30 cnrmcm5 CNRM-CM5
## 31 cnrmcm5 CNRM-CM5
## 32 cnrmcm5 CNRM-CM5
## 33 cnrmcm5 CNRM-CM5
## 34 cnrmcm5 CNRM-CM5
## 35 cnrmcm5 CNRM-CM5
## 36 cnrmcm5 CNRM-CM5
## 37 cnrmcm5 CNRM-CM5
## 38 cnrmcm5 CNRM-CM5
## 39 cnrmcm5 CNRM-CM5
## 40 cnrmcm5 CNRM-CM5
## 41 cnrmcm5 CNRM-CM5
## 42 cnrmcm5 CNRM-CM5
## 43 cnrmcm5 CNRM-CM5
## 44 cnrmcm5 CNRM-CM5
## 45 cnrmcm5 CNRM-CM5
## 46 cnrmcm5 CNRM-CM5
## 47 cnrmcm5 CNRM-CM5
## 48 cnrmcm5 CNRM-CM5
## 49 cnrmcm5 CNRM-CM5
## 50 cnrmcm5 CNRM-CM5
## 51 cnrmcm5 CNRM-CM5
## 52 cnrmcm5 CNRM-CM5
## 53 cnrmcm5 CNRM-CM5
## 54 cnrmcm5 CNRM-CM5
## 55 cnrmcm5 CNRM-CM5
## 56 cnrmcm5 CNRM-CM5
## 57 cnrmcm5 CNRM-CM5
## 58 cnrmcm5 CNRM-CM5
## atmospheric_model climatic_model_hm basin_name
## 1 CNRM-CERFACS-CNRM-CM5 cn Aa
## 2 CNRM-CERFACS-CNRM-CM5 cn Aa
## 3 CNRM-CERFACS-CNRM-CM5 cn Aa
## 4 CNRM-CERFACS-CNRM-CM5 cn Aa
## 5 CNRM-CERFACS-CNRM-CM5 cn Aa
## 6 CNRM-CERFACS-CNRM-CM5 cn Aa
## 7 CNRM-CERFACS-CNRM-CM5 cn Aa
## 8 CNRM-CERFACS-CNRM-CM5 cn Aa
## 9 CNRM-CERFACS-CNRM-CM5 cn Aa
## 10 CNRM-CERFACS-CNRM-CM5 cn Aa
## 11 CNRM-CERFACS-CNRM-CM5 cn Aa
## 12 CNRM-CERFACS-CNRM-CM5 cn Aa
## 13 CNRM-CERFACS-CNRM-CM5 cn Aa
## 14 CNRM-CERFACS-CNRM-CM5 cn Aa
## 15 CNRM-CERFACS-CNRM-CM5 cn Aa
## 16 CNRM-CERFACS-CNRM-CM5 cn Aa
## 17 CNRM-CERFACS-CNRM-CM5 cn Aa
## 18 CNRM-CERFACS-CNRM-CM5 cn Aa
## 19 CNRM-CERFACS-CNRM-CM5 cn Aa
## 20 CNRM-CERFACS-CNRM-CM5 cn Aa
## 21 CNRM-CERFACS-CNRM-CM5 cn Aa
## 22 CNRM-CERFACS-CNRM-CM5 cn Aa
## 23 CNRM-CERFACS-CNRM-CM5 cn Aa
## 24 CNRM-CERFACS-CNRM-CM5 cn Aa
## 25 CNRM-CERFACS-CNRM-CM5 cn Aa
## 26 CNRM-CERFACS-CNRM-CM5 cn Aa
## 27 CNRM-CERFACS-CNRM-CM5 cn Aa
## 28 CNRM-CERFACS-CNRM-CM5 cn Aa
## 29 CNRM-CERFACS-CNRM-CM5 cn Aa
## 30 CNRM-CERFACS-CNRM-CM5 cn Aa
## 31 CNRM-CERFACS-CNRM-CM5 cn Aa
## 32 CNRM-CERFACS-CNRM-CM5 cn Aa
## 33 CNRM-CERFACS-CNRM-CM5 cn Aa
## 34 CNRM-CERFACS-CNRM-CM5 cn Aa
## 35 CNRM-CERFACS-CNRM-CM5 cn Aa
## 36 CNRM-CERFACS-CNRM-CM5 cn Aa
## 37 CNRM-CERFACS-CNRM-CM5 cn Aa
## 38 CNRM-CERFACS-CNRM-CM5 cn Aa
## 39 CNRM-CERFACS-CNRM-CM5 cn Aa
## 40 CNRM-CERFACS-CNRM-CM5 cn Aa
## 41 CNRM-CERFACS-CNRM-CM5 cn Aa
## 42 CNRM-CERFACS-CNRM-CM5 cn Aa
## 43 CNRM-CERFACS-CNRM-CM5 cn Aa
## 44 CNRM-CERFACS-CNRM-CM5 cn Aa
## 45 CNRM-CERFACS-CNRM-CM5 cn Aa
## 46 CNRM-CERFACS-CNRM-CM5 cn Aa
## 47 CNRM-CERFACS-CNRM-CM5 cn Aa
## 48 CNRM-CERFACS-CNRM-CM5 cn Aa
## 49 CNRM-CERFACS-CNRM-CM5 cn Aa
## 50 CNRM-CERFACS-CNRM-CM5 cn Aa
## 51 CNRM-CERFACS-CNRM-CM5 cn Aa
## 52 CNRM-CERFACS-CNRM-CM5 cn Aa
## 53 CNRM-CERFACS-CNRM-CM5 cn Aa
## 54 CNRM-CERFACS-CNRM-CM5 cn Aa
## 55 CNRM-CERFACS-CNRM-CM5 cn Aa
## 56 CNRM-CERFACS-CNRM-CM5 cn Aa
## 57 CNRM-CERFACS-CNRM-CM5 cn Aa
## 58 CNRM-CERFACS-CNRM-CM5 cn Aa
## fish_name latin_name simplified_name
## 1 Allis shad Alosa alosa A. alosa
## 2 Allis shad Alosa alosa A. alosa
## 3 Allis shad Alosa alosa A. alosa
## 4 Allis shad Alosa alosa A. alosa
## 5 Allis shad Alosa alosa A. alosa
## 6 Allis shad Alosa alosa A. alosa
## 7 Allis shad Alosa alosa A. alosa
## 8 Allis shad Alosa alosa A. alosa
## 9 Allis shad Alosa alosa A. alosa
## 10 Allis shad Alosa alosa A. alosa
## 11 Allis shad Alosa alosa A. alosa
## 12 Allis shad Alosa alosa A. alosa
## 13 Allis shad Alosa alosa A. alosa
## 14 Allis shad Alosa alosa A. alosa
## 15 Allis shad Alosa alosa A. alosa
## 16 Allis shad Alosa alosa A. alosa
## 17 Allis shad Alosa alosa A. alosa
## 18 Allis shad Alosa alosa A. alosa
## 19 Allis shad Alosa alosa A. alosa
## 20 Allis shad Alosa alosa A. alosa
## 21 Allis shad Alosa alosa A. alosa
## 22 Allis shad Alosa alosa A. alosa
## 23 Allis shad Alosa alosa A. alosa
## 24 Allis shad Alosa alosa A. alosa
## 25 Allis shad Alosa alosa A. alosa
## 26 Allis shad Alosa alosa A. alosa
## 27 Allis shad Alosa alosa A. alosa
## 28 Allis shad Alosa alosa A. alosa
## 29 Allis shad Alosa alosa A. alosa
## 30 Allis shad Alosa alosa A. alosa
## 31 Allis shad Alosa alosa A. alosa
## 32 Allis shad Alosa alosa A. alosa
## 33 Allis shad Alosa alosa A. alosa
## 34 Allis shad Alosa alosa A. alosa
## 35 Allis shad Alosa alosa A. alosa
## 36 Allis shad Alosa alosa A. alosa
## 37 Allis shad Alosa alosa A. alosa
## 38 Allis shad Alosa alosa A. alosa
## 39 Allis shad Alosa alosa A. alosa
## 40 Allis shad Alosa alosa A. alosa
## 41 Allis shad Alosa alosa A. alosa
## 42 Allis shad Alosa alosa A. alosa
## 43 Allis shad Alosa alosa A. alosa
## 44 Allis shad Alosa alosa A. alosa
## 45 Allis shad Alosa alosa A. alosa
## 46 Allis shad Alosa alosa A. alosa
## 47 Allis shad Alosa alosa A. alosa
## 48 Allis shad Alosa alosa A. alosa
## 49 Allis shad Alosa alosa A. alosa
## 50 Allis shad Alosa alosa A. alosa
## 51 Allis shad Alosa alosa A. alosa
## 52 Allis shad Alosa alosa A. alosa
## 53 Allis shad Alosa alosa A. alosa
## 54 Allis shad Alosa alosa A. alosa
## 55 Allis shad Alosa alosa A. alosa
## 56 Allis shad Alosa alosa A. alosa
## 57 Allis shad Alosa alosa A. alosa
## 58 Allis shad Alosa alosa A. alosa
## [ reached 'max' / getOption("max.print") -- omitted 120542 rows ]
tbl()
only connects to the table, only a glimpse of the data is presented
filter()
is run by the SQL database
get_data_tbl <- function(conn_eurodiad, species_id, scenario) {
tbl(conn_eurodiad, "v_hybrid_model") %>%
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario)
}
# Use it
get_data_tbl(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85')
## # Source: lazy query [?? x 17]
## # Database: postgres
## # [diadesatlas_owner@localhost:5432/diades]
## hybrid_model_result_id basin_id species_id climatic_model_…
## <int> <int> <int> <int>
## 1 1395745 1 6 2
## 2 1395746 1 6 2
## 3 1395747 1 6 2
## 4 1395748 1 6 2
## 5 1395749 1 6 2
## 6 1395750 1 6 2
## 7 1395751 1 6 2
## 8 1395752 1 6 2
## 9 1395753 1 6 2
## 10 1395754 1 6 2
## # … with more rows, and 13 more variables: year <int>,
## # nit <dbl>, hsi <dbl>, saturation_rate <dbl>,
## # climatic_scenario <chr>, climatic_model_code <chr>,
## # oceanic_model <chr>, atmospheric_model <chr>,
## # climatic_model_hm <chr>, basin_name <chr>,
## # fish_name <chr>, latin_name <chr>,
## # simplified_name <chr>
get_data_tbl_collect <- function(conn_eurodiad, species_id, scenario) {
tbl(conn_eurodiad, "v_hybrid_model") %>%
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario) %>%
# From collect(), the full data is in the R session
collect()
}
# Use it
get_data_tbl_collect(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85') %>%
filter(basin_id == 1) %>%
ggplot(aes(x = year)) +
geom_line(aes(y = hsi))
tbl()
get_data_tbl_query_collect <- function(conn_eurodiad, species_id, scenario) {
query <- "SELECT * FROM diadesatlas.v_hybrid_model"
tbl(conn_eurodiad, sql(query)) %>%
# Adds a filter to be run as SQL in the database
filter(species_id %in% !!species_id,
climatic_scenario %in% !!scenario) %>%
# From collect(), the full data is in the R session
collect()
}
# Use it
get_data_tbl_query_collect(conn_eurodiad,
species_id = c(6),
scenario = 'rcp85') %>%
filter(basin_id == 1) %>%
ggplot(aes(x = year)) +
geom_line(aes(y = hsi))
DBI::dbDisconnect(conn_eurodiad)