Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds asymmetric and symmetric SAM #48

Closed
wants to merge 12 commits into from
19 changes: 11 additions & 8 deletions .github/workflows/R-CMD-check.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Workflow derived from https://github.com/r-lib/actions/tree/master/examples
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
on:
push:
Expand All @@ -18,7 +18,7 @@ jobs:
fail-fast: false
matrix:
config:
- {os: macOS-latest, r: 'release'}
- {os: macos-latest, r: 'release'}
- {os: windows-latest, r: 'release'}
- {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'}
- {os: ubuntu-latest, r: 'release'}
Expand All @@ -29,18 +29,21 @@ jobs:
R_KEEP_PKG_SOURCE: yes

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3

- uses: r-lib/actions/setup-pandoc@v1
- uses: r-lib/actions/setup-pandoc@v2

- uses: r-lib/actions/setup-r@v1
- uses: r-lib/actions/setup-r@v2
with:
r-version: ${{ matrix.config.r }}
http-user-agent: ${{ matrix.config.http-user-agent }}
use-public-rspm: true

- uses: r-lib/actions/setup-r-dependencies@v1
- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: rcmdcheck
extra-packages: any::rcmdcheck
needs: check

- uses: r-lib/actions/check-r-package@v1
- uses: r-lib/actions/check-r-package@v2
with:
upload-snapshots: true
35 changes: 24 additions & 11 deletions .github/workflows/pkgdown.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# Workflow derived from https://github.com/r-lib/actions/tree/master/examples
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
release:
types: [published]
workflow_dispatch:
Expand All @@ -12,24 +14,35 @@ name: pkgdown
jobs:
pkgdown:
runs-on: ubuntu-latest
# Only restrict concurrency for non-PR jobs
concurrency:
group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }}
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
permissions:
contents: write
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3

- uses: r-lib/actions/setup-pandoc@v1
- uses: r-lib/actions/setup-pandoc@v2

- uses: r-lib/actions/setup-r@v1
- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true

- uses: r-lib/actions/setup-r-dependencies@v1
- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: pkgdown
extra-packages: any::pkgdown, local::.
needs: website

- name: Deploy package
run: |
git config --local user.name "$GITHUB_ACTOR"
git config --local user.email "[email protected]"
Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)'
- name: Build site
run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
shell: Rscript {0}

- name: Deploy to GitHub pages 🚀
if: github.event_name != 'pull_request'
uses: JamesIves/[email protected]
with:
clean: false
branch: gh-pages
folder: docs
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ Suggests:
testthat (>= 2.1.0),
tibble
Encoding: UTF-8
RoxygenNote: 7.1.2
RoxygenNote: 7.2.3
2 changes: 2 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

export(download_aao)
export(download_ao)
export(download_asymsam_daily)
export(download_asymsam_monthly)
export(download_dmi)
export(download_enso)
export(download_mei)
Expand Down
117 changes: 117 additions & 0 deletions R/download-asymsam.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
#' @export
#' @title Download Asymmetric and Symmetric SAM indices
#'
#' @description The Asymmetric and Symmetric SAM indices are computed as the
#' projection of geopotential height anomalies onto the zonally asymmetric and
#' zonally symmetric parts of the SAM field.
#' The detailed methodology can be found in Campitelli et al. (2022).
#' The source of the data is \url{https://www.cima.fcen.uba.ar/~elio.campitelli/asymsam/}
#'
#' @inheritParams download_oni
#' @param levels atmospheric levels in hPa to download.
#' If \code{"all"} download all available levels.
#' Available levels are: 1, 2, 3, 5, 7, 10, 20, 30, 50, 70, 100, 125, 150, 175,
#' 200, 225, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 775, 800,
#' 825, 850, 875, 900, 925, 950, 975 and 1000.
#'
#' @return
#' \itemize{
#' \item Lev: Atmospheric level in hPa
#' \item Date: Date object that uses the first of the month as a placeholder. Date formatted as date on the first of the month because R only supports one partial of date time
#' \item Index: Type of index. Either "sam", "ssam" or "asam".
#' \item Value: Value of the index
#' \item Value_normalized: Value of the index normalized by the standard deviation of the index
#' \item R.squared: The variance explained by the index (only in the daily version)
#' }
#'
#' @examples
#' \dontrun{
#' asymsam <- download_asymsam_monthly()
#' }
#'
#' @references Campitelli, E., Díaz, L. B., & Vera, C. (2022). Assessment of zonally symmetric and asymmetric components of the Southern Annular Mode using a novel approach. Climate Dynamics, 58(1), 161–178. \url{https://doi.org/10.1007/s00382-021-05896-5}
download_asymsam_monthly <- function(use_cache = FALSE, file = NULL) {
with_cache(use_cache = use_cache, file = file,
memoised = download_asymsam_monthly_memoised,
unmemoised = download_asymsam_monthly_unmemoised,
read_function = read_asymsam_monthly)
}

download_asymsam_monthly_unmemoised = function() {
asymsam_monthly_link = "https://www.cima.fcen.uba.ar/~elio.campitelli/asymsam/data/sam_monthly.csv"

data <- read.csv(asymsam_monthly_link, colClasses = c("integer", "character", "Date", "numeric", "numeric"),
col.names = c("Lev", "Index", "Date", "Value", "Value_normalized"))
data$Index <- factor(data$Index, levels = c("sam", "ssam", "asam"))

class(data) = c("tbl_df", "tbl", "data.frame")
data
}

download_asymsam_monthly_memoised <- memoise::memoise(download_asymsam_monthly_unmemoised)

read_asymsam_monthly <- function(file) {
data <- read.csv(file)
data$Date <- as.Date(data$Date)
data$Index <- factor(data$Index, levels = c("sam", "ssam", "asam"))
class(data) <- c("tbl_df", "tbl", "data.frame")
data
}


#' @export
#' @rdname download_asymsam_monthly
download_asymsam_daily <- function(levels = 700, use_cache = FALSE, file = NULL) {
with_cache(use_cache = use_cache, file = file,
memoised = download_asymsam_monthly_memoised,
unmemoised = download_asymsam_daily_unmemoised,
read_function = read_asymsam_monthly,
levels = levels)
}


download_asymsam_daily_unmemoised = function(levels = 700) {
available_levels <- c(1L, 2L, 3L, 5L, 7L, 10L, 20L, 30L, 50L, 70L, 100L, 125L, 150L,
175L, 200L, 225L, 250L, 300L, 350L, 400L, 450L, 500L, 550L, 600L,
650L, 700L, 750L, 775L, 800L, 825L, 850L, 875L, 900L, 925L, 950L,
975L, 1000L)
if (levels[1] == "all") {
levels <- available_levels
}

bad_levels <- !(levels %in% available_levels)
if (any(bad_levels)) {
stop(paste("Invalid levels:", paste(levels[bad_levels], collapse = ", "),
"\nValid levels are:", paste(available_levels, collapse = ", ")))
}

root_link = "https://www.cima.fcen.uba.ar/~elio.campitelli/asymsam/data/sam_level/"

all_data <- list()
for (level in levels) {
message("Downloading level: ", level)
link <- paste0(root_link, "sam_", level, "hPa.csv")
data <- read.csv(link, colClasses = c("integer", "character", "Date", "numeric", "numeric", "numeric"),
col.names = c("Lev", "Index", "Date", "Value", "R.squared", "dump"))
data$dump <- NULL
all_data <- append(all_data, list(data))
}
all_data <- do.call(rbind, all_data)

all_data$Index <- factor(all_data$Index, levels = c("sam", "ssam", "asam"))

class(all_data) = c("tbl_df", "tbl", "data.frame")
all_data
}


download_asymsam_monthly_memoised <- download_asymsam_monthly_unmemoised

read_asymsam_daily <- function(file) {
data <- read.csv(file)
data$Date <- as.Date(data$Date)
data$Lev <- as.integer(data$Lev)
data$Index <- factor(data$Index, levels = c("sam", "ssam", "asam"))
class(data) <- c("tbl_df", "tbl", "data.frame")
data
}
3 changes: 2 additions & 1 deletion R/download-nao.R
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ download_nao_unmemoised <- function(){

nao = read.fwf(nao_link,
widths = c(4, rep(7, 12)),
header = FALSE,
header = FALSE,
skip = 1,
col.names = c("Year", month.abb))

reshaped_list <- lapply(
Expand Down
2 changes: 1 addition & 1 deletion README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ knitr::opts_chunk$set(


[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![R-CMD-check](https://github.com/boshek/rsoi/workflows/R-CMD-check/badge.svg)](https://github.com/boshek/rsoi/actions)
[![R-CMD-check](https://github.com/boshek/rsoi/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/boshek/rsoi/actions/workflows/R-CMD-check.yaml)

[![CRAN\_Status\_Badge](https://www.r-pkg.org/badges/version/rsoi)](https://cran.r-project.org/package=rsoi) [![CRAN Downloads](https://cranlogs.r-pkg.org/badges/rsoi?color=brightgreen)](https://CRAN.R-project.org/package=rsoi) [![cran checks](https://cranchecks.info/badges/worst/rsoi)](https://cran.r-project.org/web/checks/check_results_rsoi.html)

Expand Down
50 changes: 50 additions & 0 deletions man/download_asymsam_monthly.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions rsoi.Rproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ LaTeX: pdfLaTeX
BuildType: Package
PackageUseDevtools: Yes
PackageInstallArgs: --no-multiarch --with-keep.source
PackageRoxygenize: rd,collate,namespace
3 changes: 1 addition & 2 deletions tests/testthat/test_download_.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
indexes <- c("oni", "ao", "nao", "soi", "mei", "npgo", "aao", "pdo", "dmi")

indexes <- c("oni", "ao", "nao", "soi", "mei", "npgo", "aao", "pdo", "dmi", "asymsam_monthly", "asymsam_daily")
context("Testing download")


Expand Down
Loading