Skip to content

Instantly share code, notes, and snippets.

@njtierney
Created May 11, 2021 08:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save njtierney/447e7c4c11d249403e0937668dcb1552 to your computer and use it in GitHub Desktop.
Save njtierney/447e7c4c11d249403e0937668dcb1552 to your computer and use it in GitHub Desktop.

The rules are

X + NA = X NA + NA = NA

sum_na <- function(x,y){
  nas <- is.na(c(x,y))
  all_na <- all(nas)
  any_na <- any(nas)
  no_na <- all(!is.na(c(x,y)))
  if (all_na) {
    return(NA)
  } else if (any_na) {
    c(x,y)[!nas]
  } else if (no_na){
    sum(x,y)
  }
}

sum_na(1,2)
#> [1] 3
sum_na(1, NA)
#> [1] 1
sum_na(NA, 1)
#> [1] 1
sum_na(NA, NA)
#> [1] NA

Created on 2021-05-11 by the reprex package (v2.0.0)

Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value                       
#>  version  R version 4.0.5 (2021-03-31)
#>  os       macOS Big Sur 10.16         
#>  system   x86_64, darwin17.0          
#>  ui       X11                         
#>  language (EN)                        
#>  collate  en_AU.UTF-8                 
#>  ctype    en_AU.UTF-8                 
#>  tz       Australia/Perth             
#>  date     2021-05-11                  
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package     * version date       lib source            
#>  backports     1.2.1   2020-12-09 [1] standard (@1.2.1) 
#>  cli           2.5.0   2021-04-26 [1] CRAN (R 4.0.2)    
#>  crayon        1.4.1   2021-02-08 [1] CRAN (R 4.0.2)    
#>  digest        0.6.27  2020-10-24 [1] standard (@0.6.27)
#>  ellipsis      0.3.1   2020-05-15 [1] standard (@0.3.1) 
#>  evaluate      0.14    2019-05-28 [1] standard (@0.14)  
#>  fansi         0.4.2   2021-01-15 [1] CRAN (R 4.0.2)    
#>  fs            1.5.0   2020-07-31 [1] standard (@1.5.0) 
#>  glue          1.4.2   2020-08-27 [1] standard (@1.4.2) 
#>  highr         0.8     2019-03-20 [1] standard (@0.8)   
#>  htmltools     0.5.1.1 2021-01-22 [1] CRAN (R 4.0.2)    
#>  knitr         1.31    2021-01-27 [1] CRAN (R 4.0.2)    
#>  lifecycle     1.0.0   2021-02-15 [1] CRAN (R 4.0.2)    
#>  magrittr      2.0.1   2020-11-17 [1] standard (@2.0.1) 
#>  pillar        1.6.0   2021-04-13 [1] CRAN (R 4.0.2)    
#>  pkgconfig     2.0.3   2019-09-22 [1] standard (@2.0.3) 
#>  purrr         0.3.4   2020-04-17 [1] standard (@0.3.4) 
#>  reprex        2.0.0   2021-04-02 [1] CRAN (R 4.0.2)    
#>  rlang         0.4.11  2021-04-30 [1] CRAN (R 4.0.2)    
#>  rmarkdown     2.7     2021-02-19 [1] CRAN (R 4.0.2)    
#>  sessioninfo   1.1.1   2018-11-05 [1] standard (@1.1.1) 
#>  stringi       1.5.3   2020-09-09 [1] standard (@1.5.3) 
#>  stringr       1.4.0   2019-02-10 [1] standard (@1.4.0) 
#>  styler        1.4.1   2021-03-30 [1] CRAN (R 4.0.2)    
#>  tibble        3.1.1   2021-04-18 [1] CRAN (R 4.0.3)    
#>  utf8          1.2.1   2021-03-12 [1] CRAN (R 4.0.2)    
#>  vctrs         0.3.8   2021-04-29 [1] CRAN (R 4.0.2)    
#>  withr         2.4.2   2021-04-18 [1] CRAN (R 4.0.3)    
#>  xfun          0.22    2021-03-11 [1] CRAN (R 4.0.2)    
#>  yaml          2.2.1   2020-02-01 [1] standard (@2.2.1) 
#> 
#> [1] /Library/Frameworks/R.framework/Versions/4.0/Resources/library
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment