Code Monkey home page Code Monkey logo

loadflex's Introduction

loadflex: Models and Tools for Watershed Flux Estimates

In summer or fall 2023, this package will move from https://github.com/USGS-R/loadflex to https://github.com/DOI-USGS/loadflex Please update your links accordingly.

The loadflex R package implements several of the most common methods for modeling and predicting watershed solute fluxes and concentrations, including interpolation and regression models, period-weighted averaging, and the composite method. loadflex integrates seamlessly with the USGS’s rloadest package and with native R regression models. It offers a uniform interface for any model type, with which you can quickly fit models, generate predictions, and aggregate to monthly or annual values.

This package has been described in Appling et al. (2015):

Appling, A. P., Leon, M. C., & McDowell, W. H. (2015). Reducing bias and quantifying uncertainty in watershed flux estimates: The R package loadflex. Ecosphere, 6(12), art269. https://doi.org/10.1890/ES14-00517.1

To see the recommended citation for this package, please run citation('loadflex') at the R prompt.

citation('loadflex')
## 
## To cite package 'loadflex' in publications use:
## 
##   Appling, A. P., M. C. Leon, and W. H. McDowell. 2015. Reducing bias
##   and quantifying uncertainty in watershed flux estimates: the R
##   package loadflex. Ecosphere 6(12):269.
##   https://doi.org/10.1890/ES14-00517.1
## 
## A BibTeX entry for LaTeX users is
## 
##   @Article{,
##     title = {Reducing bias and quantifying uncertainty in watershed flux estimates: the R package loadflex},
##     author = {Alison P. Appling and Miguel C. Leon and William H. McDowell},
##     year = {2015},
##     journal = {Ecosphere},
##     volume = {6},
##     number = {12},
##     pages = {art269},
##     doi = {10.1890/ES14-00517.1},
##     url = {http://www.esajournals.org/doi/full/10.1890/ES14-00517.1},
##   }

Installation

To install the loadflex package, use the remotes package as follows (running install.packages('remotes') first if needed). To use remotes::install_gitlab() it is convenient to set a GitLab Personal Access Token (PAT). Similarly, to use remotes::install_github() it is convenient to set a GitHub PAT. There are several methods for setting your PATs within R; the simplest is to call `Sys.setenv(GITLAB_PAT=“xxxx”, GITHUB_PAT=“yyyy”), replacing xxxx and yyyy with the PATs you established on the GitLab and GitHub websites.

You will also need a compiler to install smwrStats, smwrQW, and rloadest – for Windows, see https://cran.r-project.org/bin/windows/Rtools/rtools43/rtools.html. For Mac, see https://mac.r-project.org/tools/.

library(remotes)
remotes::install_gitlab("water/analysis-tools/smwrData", host = "code.usgs.gov")
remotes::install_gitlab("water/analysis-tools/smwrBase", host = "code.usgs.gov")
remotes::install_gitlab("water/analysis-tools/smwrGraphs", host = "code.usgs.gov")
remotes::install_gitlab("water/analysis-tools/smwrStats", host = "code.usgs.gov") # needs compilation
remotes::install_gitlab("water/analysis-tools/smwrQW", host = "code.usgs.gov")    # needs compilation
remotes::install_gitlab("water/analysis-tools/rloadest", host = "code.usgs.gov")  # needs compilation
remotes::install_github("appling/unitted")
remotes::install_github("DOI-USGS/EGRET")
remotes::install_github("USGS-R/loadflex") # soon to be "DOI-USGS/loadflex"

Also please see the installation FAQ on the wiki (https://github.com/USGS-R/loadflex/wiki/Installation-FAQ) if you run into trouble.

Getting Started

To get started, load the package with library(loadflex) and type ?loadflex or vignette('intro_to_loadflex').

Development and Maintenance Status

loadflex is a USGS Archive Research Package: USGS Status

Project funding has ended and our maintenance time is limited, but we do attempt to provide bug fixes and lightweight support as we are able. Submit questions or suggestions to https://github.com/USGS-R/loadflex/issues.

Contributing

We want to encourage a warm, welcoming, and safe environment for contributing to this project. See CODE_OF_CONDUCT.md for more information.

For technical details on how to contribute, see CONTRIBUTING.md

Contributing

We want to encourage a warm, welcoming, and safe environment for contributing to this project. See CODE_OF_CONDUCT.md for more information.

For technical details on how to contribute, see CONTRIBUTING.md

Development History

loadflex was created 2013-2015 by Alison Appling and Miguel Leon with the support of Bill McDowell and the McDowell lab at the University of New Hampshire. Funding for the project was provided by the National Science Foundation, USDA National Institute of Food and Agriculture, and the NH Agricultural Experiment Station. Funding for the example dataset from the Lamprey River was provied by the EPA, NH Water Resources Research Center, NH Agricultural Experiment Station, NH Sea Grant, USGS, and NSF.

Additional development and maintenance in 2016-2017 was done by Alison Appling, Lindsay Platt, and David Watkins with support from the USGS National Water Quality Program and the USGS Office of Water Information.

Model Archive

The following version of R and package dependencies were used most recently to pass the embedded tests within this package. There is no guarantee of reproducible results using future versions of R or updated versions of package dependencies; however, we aim to test and update future modeling environments.

> sessioninfo::session_info()

## (TBD)

Disclaimer

This software is preliminary or provisional and is subject to revision. It is being provided to meet the need for timely best science. The software has not received final approval by the U.S. Geological Survey (USGS). No warranty, expressed or implied, is made by the USGS or the U.S. Government as to the functionality of the software and related material nor shall the fact of release constitute any such warranty. The software is provided on the condition that neither the USGS nor the U.S. Government shall be held liable for any damages resulting from the authorized or unauthorized use of the software.

loadflex's People

Contributors

aappling-usgs avatar appling avatar jesse-ross avatar jpadilla-usgs avatar jsta avatar katrinleinweber avatar ldecicco-usgs avatar wdwatkins avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

loadflex's Issues

get test_check running w/o error

Tests should:

  • Test whether the function behavior matches the documentation
  • Cover all probable use cases for a function or file
  • Avoid user/developer interaction (this will require changes from some development-phase tests)
  • Avoid producing plots or text output other than testthat output (this will require changes from some development-phase tests)
  • Contain internal comments where necessary to explain/justify tests
  • Be organized into readable test_that blocks
  • Run reasonably quickly
  • Use only data available within the package and/or reproducibly generated (e.g., through fixed text definitions of the data, or using set.seed() before random data generation)
  • Run cleanly on package tests (Ctrl-Shift-T) and eventually also check (Ctrl-Shift-E)

To do:

  • 01-match.arg.loadflex (#26)
  • 02-text (#27)
  • 03-unit.conversions (#28)
  • 04-uncertainty (#29)
  • 05-diagnostics (#30)
  • 06-covariance (#31)
  • 11-metadata (#32)
  • 21-loadModel (#33)
  • 22-loadLm (#34)
  • 23-1-interpolations (#35)
  • 23-2-loadInterp (#36)
  • 24-1-loadReg (#37)
  • 24-2-loadReg2 (#38)
  • 25-loadComp (#39)
  • 31-loadModelInterface (#40)
  • 32-getResiduals (#41)
  • 33-aggregateSolute (#42)
  • 41-predictors (#43)
  • 42-outliers (#44)
  • 43-leverage (#45)
  • 44-plots (#46)

check issue: checking R code for possible problems ... NOTE

checking R code for possible problems ... NOTE

  • estimateMSE.loadComp: warning in formatPreds(rep(1,
    nrow(resid.model@data)), from = [email protected], to = "conc",
    newdata = resid.model@data, metadata = resid.model@metadata,
    attach.units = FALSE): partial argument match of 'from' to
    'from.format'
  • estimateMSE.loadComp: warning in formatPreds(rep(1,
    nrow(resid.model@data)), from = [email protected], to = "conc",
    newdata = resid.model@data, metadata = resid.model@metadata,
    attach.units = FALSE): partial argument match of 'to' to 'to.format'
  • estimateMSE.loadComp: warning in formatPreds(rep(1,
    nrow(resid.model@data)), from = [email protected], to = "flux",
    newdata = resid.model@data, metadata = resid.model@metadata,
    attach.units = FALSE): partial argument match of 'from' to
    'from.format'
  • estimateMSE.loadComp: warning in formatPreds(rep(1,
    nrow(resid.model@data)), from = [email protected], to = "flux",
    newdata = resid.model@data, metadata = resid.model@metadata,
    attach.units = FALSE): partial argument match of 'to' to 'to.format'
  • estimateMSE.loadInterp: warning in formatPreds(rep(1,
    nrow(load.model@data)), from = [email protected], to = "conc",
    newdata = load.model@data, metadata = load.model@metadata,
    attach.units = FALSE): partial argument match of 'from' to
    'from.format'
  • estimateMSE.loadInterp: warning in formatPreds(rep(1,
    nrow(load.model@data)), from = [email protected], to = "conc",
    newdata = load.model@data, metadata = load.model@metadata,
    attach.units = FALSE): partial argument match of 'to' to 'to.format'
  • estimateMSE.loadInterp: warning in formatPreds(rep(1,
    nrow(load.model@data)), from = [email protected], to = "flux",
    newdata = load.model@data, metadata = load.model@metadata,
    attach.units = FALSE): partial argument match of 'from' to
    'from.format'
  • estimateMSE.loadInterp: warning in formatPreds(rep(1,
    nrow(load.model@data)), from = [email protected], to = "flux",
    newdata = load.model@data, metadata = load.model@metadata,
    attach.units = FALSE): partial argument match of 'to' to 'to.format'
  • cormat1DayBand: no visible global function definition for 'Matrix'
  • cormatDiagonal: no visible global function definition for 'Diagonal'
  • cormatEqualDates: no visible global function definition for 'Matrix'
  • flowconcToFluxConversion: no visible binding for global variable
    'numerator'
  • flowconcToFluxConversion: no visible binding for global variable
    'denominator'
  • fluxInfluence : : no visible global function definition for
    'predictSoluteFromRegression'
  • fluxInfluence : : possible error in
    aggregateSolute(load.or.conc = load.or.conc, verbose = FALSE,
    load.model = load.model, loads = adjusted_predictions,
    aggregation.interval = aggregation.interval): unused arguments
    (load.or.conc = load.or.conc, verbose = FALSE, load.model =
    load.model, loads = adjusted_predictions, aggregation.interval =
    aggregation.interval)
  • fluxInfluence : : no visible global function definition for
    'predSoluteCM'
  • fluxInfluence: no visible binding for '<<-' assignment to 'Yhatmsg'
  • generateUnitsData: no visible binding for global variable 'denominator'
  • generateUnitsData: no visible binding for global variable 'numerator'
  • generateUnitsData: no visible binding for global variable 'value'
  • getCormatCustom : : no visible global function definition
    for 'Matrix'
  • getCormatFirstOrder : : no visible global function
    definition for 'Matrix'
  • getCormatTaoBand : : no visible global function definition
    for 'Matrix'
  • getPred_baseflow: no visible global function definition for 'is.Date'
  • getPred_baseflow: no visible global function definition for 'is.POSIXt'
  • getPred_baseflow: no visible global function definition for 'hysep'
  • isTimestepRegular: no visible binding for global variable
    'TimeInterval'
  • meltDates: no visible global function definition for 'melt'
  • plotCM: no visible binding for global variable 'DATE'
  • plotCM: no visible binding for global variable 'value'
  • plotCM: no visible binding for global variable 'variable'
  • plotCM: no visible global function definition for 'brewer.pal'
  • plotResidualsCM: no visible global function definition for
    'predictSoluteFromRegression'
  • plotResidualsCM: no visible global function definition for 'yday'
  • predictSolute.loadReg2 : : no visible global function
    definition for 'predLoad'
  • predictSolute.loadReg2 : : no visible global function
    definition for 'predConc'
  • simulateSolute.loadLm: no visible binding for global variable 's.hat'
  • simulateSolute.loadReg2: no visible binding for global variable 's.hat'
  • transformDates: no visible global function definition for 'is.POSIXt'
  • transformDates: no visible binding for global variable 'DATE'
  • transformDates: no visible global function definition for 'is.Date'
  • translateFreeformToUnitted : : : no visible
    binding for global variable 'old'
  • validMetadataUnits : hasDim: no visible binding for global variable
    'unit'

exploratory plots

Dear loadflex user community,
What exploratory plots would you like to be able to make with loadflex? We can't promise highly customizable or publication-worthy plots, but we'd like to help you with the quick-and-dirty plots that help you evaluate your data inputs, models, and/or model output.
Please respond with a comment to this issue.
Thanks,
Alison and Miguel

Our current priority list:

  • Data inputs, especially concentration and discharge but extensible to other predictors
  • Predictions versus time for any model type, with uncertainty ribbon
  • Aggregate predictions versus time for any model type, with uncertainty intervals
  • For composite models: predictions by regression, shaded zone of composite correction, and composite prediction
  • Residuals versus time, versus a predictor (especially discharge), versus day of year, ...
  • Observations versus time, versus a predictor (especially discharge), versus day of year, ...

warning-level package loading conflict

This warning has appeared recently during package build or check:

* installing *source* package 'loadflex' ...
** R
** data
** inst
** preparing package for lazy loading
Note: the specification for S3 class "family" in package 'MatrixModels' seems equivalent to one from package 'lme4': not turning on duplicate class definitions for this class.

examples & tests: plots

  • fix tests (see #8) in tests/testthat/test-44-plots.R
  • add examples (see #9) to R/plots.R

(but should plots exist? a good plotting suite would be much larger.)

check issue: checking Rd contents ... WARNING

checking Rd contents ... WARNING
Argument items with no description in Rd object 'loadInterp':
'retrans.function'

Argument items with no description in Rd object 'loadLm':
'retrans.function'

examples & tests: outliers

  • fix tests (see #8) in tests/testthat/test-42-outliers.R
  • add examples (see #9) to R/outliers.R

(but should outliers.R exist?)

check issue: checking for missing documentation entries ... WARNING

checking for missing documentation entries ... WARNING

  • Undocumented data sets:
  'lamprey_discharge' 'lamprey_nitrate'
  • Undocumented S4 methods:
  generic '==' and siglist 'metadata,metadata'
  generic 'show' and siglist 'loadModel'
  generic 'show' and siglist 'metadata'

All user-level objects in a package (including S4 classes and methods)
should have documentation entries.
See chapter 'Writing R documentation files' in the 'Writing R
Extensions' manual.

check issue: checking dependencies in R code ... WARNING

checking dependencies in R code ... WARNING

  • 'library' or 'require' calls not declared from:
    'DVstats' 'MASS' 'Matrix' 'car' 'rloadest' 'unitted'
  • 'library' or 'require' calls in package code:
    'DVstats' 'MASS' 'Matrix' 'car' 'rloadest' 'unitted'
    Please use :: or requireNamespace() instead.
    See section 'Suggested packages' in the 'Writing R Extensions' manual.
  • Namespace in Imports field not imported from: 'plyr'
    All declared Imports should be used.
  • package 'methods' is used but not declared

check issue: checking Rd line widths ... NOTE

checking Rd line widths ... NOTE

  • Rd file 'aggregateSolute.Rd':
    \examples lines wider than 100 characters:
    new_correlation_assumption <- getCormatFirstOrder(rho=0.9, time.step=as.difftime(1, units="days"), max.tao=as.difftime(10, units="days" ... [TRUNCATED]
  • Rd file 'flowconcToFluxConversion.Rd':
    \examples lines wider than 100 characters:
    library(unitted); u(10, "ft^3 s^-1") * u(2, "mg L^-1") * flowconcToFluxConversion("cfs", "mg/L", "kg/d", attach.units=TRUE) # u(48.9 ," ... [TRUNCATED]
  • Rd file 'formatPreds.Rd':
    \examples lines wider than 100 characters:
    obs <- transform(data.frame(MyConc=1:10, MyFlow=rep(10,10)), MyFlux=MyConc_MyFlow_rloadest::loadConvFactor("cms", "mg/l", "kg") )
    md <- updateMetadata(exampleMetadata(), constituent="MyConc", flow="MyFlow", load.rate="MyFlux", dates="none",
    formatPreds(preds=obs$MyConc, from.format="conc", to.format="flux", newdata=obs, metadata=md) # == obs$MyFlux
    formatPreds(preds=obs$MyConc_obs$MyFlow, from.format="conc_flow", to.format="flux", newdata=obs, metadata=md) # == obs$MyFlux
    formatPreds(preds=obs$MyFlux, from.format="flux", to.format="conc", newdata=obs, metadata=md) # == obs$MyConc
    formatPreds(preds=obs$MyFlux, from.format="flux", to.format="conc", newdata=obs, metadata=md, attach.units=TRUE) # == u(obs$MyConc, "mg ... [TRUNCATED]
  • Rd file 'observeSolute.Rd':
    \examples lines wider than 100 characters:
    obs <- data.frame(MyConc=(1:10)/10, MyFlow=rep(10,10), MyFlux=2) # intentionally inconsistent between conc*flow and flux
    md <- updateMetadata(exampleMetadata(), constituent="MyConc", flow="MyFlow", load.rate="MyFlux", dates="none",

These lines will be truncated in the PDF manual.

add function examples

Function examples should:

  • Be present in every roxygen2 #' block
  • Include ~2-4 examples
  • Demonstrate common use cases and important options
  • Include library() calls or otherlib::fun() syntax to manage dependencies
  • Only use packages that are also listed in the Imports or Suggests blocks of the DESCRIPTION file
  • Either run quickly and without warning/error, or be wrapped in a \dontrun{} block
  • Use only data available within the package and/or reproducibly generated (e.g., through fixed text definitions of the data, or using set.seed() before random data generation)
  • Run cleanly on package check (Ctrl-Shift-E)

To do:

  • aggregateSolute (#42)
  • covariance (#31)
  • diagnostics (#30)
  • getResiduals (#41)
  • interpolations (#35)
  • leverage (#45)
  • loadComp (#39)
  • loadflex (#47)
  • loadInterp (#36)
  • loadLm (#34)
  • loadModel (#33)
  • loadModelInterface (#40)
  • loadReg (#37)
  • loadReg2 (#38)
  • match.arg.loadflex (#26)
  • metadata (#32)
  • outliers (#44)
  • plots (#46)
  • predictors (#43)
  • text (#27)
  • uncertainty (#29)
  • unit.conversions (#28)

update package citations

if possible, citation("loadflex") should include a suggestion to also cite rloadest when a loadReg model is used or incorporated

examples & tests: leverage

  • fix tests (see #8) in tests/testthat/test-43-leverage.R
  • add examples (see #9) to R/leverage.R

(but should leverage.R exist?)

check issue: checking S3 generic/method consistency ... WARNING

checking S3 generic/method consistency ... WARNING

  • estimateMSE:
    function(load.model, ...)
    estimateMSE.loadComp:
    function(load.model, n.iter, method, rho)
  • estimateMSE:
    function(load.model, ...)
    estimateMSE.loadInterp:
    function(load.model, n.out, n.iter, replace)
  • getMetadata:
    function(load.model)
    getMetadata.loadReg:
    function(fit)

See section 'Generic functions and methods' in the 'Writing R
Extensions' manual.

check issue: checking Rd \usage sections ... WARNING

checking Rd \usage sections ... WARNING

  • Objects in \usage without \alias in documentation object 'equals.metadata':
    '\S4method{==}{metadata,metadata}'
  • Undocumented arguments in documentation object 'estimateMSE.loadComp'
    'method'
  • Undocumented arguments in documentation object 'estimateRho'
    'use.log' 'plot.acf' 'timestep.tol' 'irregular.timesteps.ok'
  • Undocumented arguments in documentation object 'fluxInfluence'
    'fit.function' 'obs.calib' 'obs.adjust' 'data.to.predict'
    'correction.method' 'replace.negatives' 'aggregation.interval'
    'influence.on'
  • Documented arguments not in \usage in documentation object 'fluxInfluence':
    'fit.and.total.function' 'X.calib' 'Y.calib' 'X.est' 'P.est'
  • Undocumented arguments in documentation object 'genericDistanceWeightedInterpolation'
    'inv.dist.fun'
  • Undocumented arguments in documentation object 'getMetadata.loadReg'
    'fit'
  • Documented arguments not in \usage in documentation object 'getMetadata.loadReg':
    'load.model'
  • Undocumented arguments in documentation object 'isTimestepRegular'
    'tol'
  • Undocumented arguments in documentation object 'loadComp'
    'MSE.method'
  • Undocumented arguments in documentation object 'loadLm'
    'fitting_function' 'y.trans.function'
  • Undocumented arguments in documentation object 'loadModel'
    'metadata'
  • Undocumented arguments in documentation object 'loadReg2'
    '...'
  • Undocumented arguments in documentation object 'metadata'
    'metadata'
  • Undocumented arguments in documentation object 'plotCM'
    'linear.interpolation' 'dateField'
  • Documented arguments not in \usage in documentation object 'plotCM':
    'linear.interpoltation'
  • Undocumented arguments in documentation object 'plotResidualsCM'
    'type' 'xObservations' 'xFlow'
  • Undocumented arguments in documentation object 'residDurbinWatson'
    'timestep.tol'
  • Objects in \usage without \alias in documentation object 'show.loadModel':
    '\S4method{show}{loadModel}'
  • Objects in \usage without \alias in documentation object 'show.metadata':
    '\S4method{show}{metadata}'
  • Undocumented arguments in documentation object 'simulateSolute'
    '...'
  • Undocumented arguments in documentation object 'simulateSolute.loadLm'
    '...'
  • Undocumented arguments in documentation object 'simulateSolute.loadModel'
    '...'
  • Undocumented arguments in documentation object 'simulateSolute.loadReg2'
    '...'
  • Undocumented arguments in documentation object 'validLoadModelInterface'
    'verbose'
  • Undocumented arguments in documentation object 'validMetadataUnits'
    'unit.type'

Functions with \usage entries need to have the appropriate \alias
entries, and all their arguments documented.
The \usage entries must correspond to syntactically valid R code.
See chapter 'Writing R documentation files' in the 'Writing R
Extensions' manual.

check/add references

check that we're including academic references in the roxygen2 documentation everywhere it's appropriate

check issue: checking Rd cross-references ... WARNING

checking Rd cross-references ... WARNING

  • Missing link or links in documentation object 'genericTriangularInterpolation.Rd':
    'geTriangularInterpolation'

See section 'Cross-references' in the 'Writing R Extensions' manual.

check issue: checking for code/documentation mismatches ... WARNING

checking for code/documentation mismatches ... WARNING

  • S4 class codoc mismatches from documentation object 'compModel-class':
    Slots for class 'compModel'
    Code: abs.or.rel.resids log.resids reg.model resid.model
    Docs: abs.or.rel.resids reg.model resid.model var.pred.error
  • S4 class codoc mismatches from documentation object 'interpModel-class':
    Slots for class 'interpModel'
    Code: dates.class dates.in interp.function y.in
    Docs: dates.in interp.function y.in
  • S4 class codoc mismatches from documentation object 'loadLm-class':
    Slots for class 'loadLm'
    Code: data fit fitting.function metadata pred.format retrans.function y.trans.function ylog
    Inherited: fit pred.format metadata data fitting.function y.trans.function retrans.function
    Docs: fit
  • S4 class codoc mismatches from documentation object 'metadata-class':
    Slots for class 'metadata'
    Code: conc.units constituent custom dates flow flow.units load.rate load.rate.units load.units station
    Docs: conc.units constitutent custom dates flow flow.units load.rate load.rate.units load.units station

leverage.R

While looking at the undocumented arguments for fluxInfluence in leverage.R, it appears that neither fluxInfluence nor generalizedLeverage are used anywhere else in the loadflex code and the code for these functions use old names for functions such as predictSoluteFromRegression and predSoluteCM instead of predictSolute. Should leverage.R be updated or removed?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.