README.md

envi

Build
Status AppVeyor build
status codecov Lifecycle:
experimental

The goal of the envi package is manage mulitple R environments (collections of package). This means providing functionality to retrieve remote environments, create new environments, and switch between them. The envi package integrates functionality provided by Kevin Ushey’s renv package, which provides individual environment fuctionality, and other packages including git2r and piggyback, which provides source control and access to remote environments.

To draw an analogy from the Python community, just as the renv package is similar to the virtual environments functionality provided in Python, envi is similar to conda. However, the scope is more limited in the following ways.

  1. Conda is a general application independent of a programming language or environment and configuration is generally performed from the terminal. The envi package is used from within the R programming environment. This has the advantage of making it more accessible to R users, who may not have the system administration experience needed to tune installations or troubleshoot problems with paths. At the same time, envi environment configurations and the R environments they manage can easily be modified by more savvy users.
  2. Conda functions as both a package manager - allowing you install programming languages environments - as well as a manager for programming-language specific libraries. While envi package allows you to configure a Python environment through renv, it is intended to create and manage R environments. This limitation in scope makes the management of package dependencies, one of Conda’s core goals, almost trivial because of the R commuities enforcement of downstream package compatibility via CRAN.

Installation

The envi package is still under developement and is not available on CRAN. However, it can be installed from GitHub with:

# install.packages("devtools")
devtools::install_github("kaneplusplus/envi")

Example

Suppose you’d like to create a deep learning model with the keras but you don’t have Python installed, you do have Python installed but you’re not sure how to get R to talk with Python, or you’re feeling lazy. Instead of configuring your keras installation, you can download and manage an enironment on Github with envi on R version 2.6.1. You can check your version with Sys.getenv()[['R_VERSION']]

library(envi)

# Get the appropriate repo for the platform.
envi_image <- switch(Sys.info()[['sysname']],
                    Darwin = "keras-environmentx86_64-apple-darwin15.6.0.tar.bz2",
                    Windows = "keras-environmentx86_64-w64-mingw32.zip",
                    Linux = "keras-environmentx86_64-pc-linux-gnu.tar.bz2")

# Get the environment and call it keras-env. Note that the environment is big 
# and the following can take some time.
envi_pb_install(envi_image, repo = "kaneplusplus/keras-envi", handle = "keras-env")
#> Downloading piggyback'ed environment.
#> Warning in get_token(): Using default public GITHUB_TOKEN.
#>                      Please set your own token

#> Warning in get_token(): Using default public GITHUB_TOKEN.
#>                      Please set your own token

# See which environments we have and where they are located.
envi_list()
#> # A tibble: 1 x 2
#>   handle    path                                                                
#>   <chr>     <chr>                                                               
#> 1 keras-env /Users/mike/.envi/environments/keras-environmentx86_64-apple-darwin…

Now that we have the environment, which includes keras and an installation of Python, let’s use it to build a simple deep learner.

# Activate the enviroment.
envi_activate("keras-env")

# Now we can use the environments packages and other functionality.
library(keras)

# Create a model to predict iris species.
dl_model <- keras_model_sequential() %>%
  layer_dense(units = 4) %>%
  layer_dense(units = 3, activation = "softmax")

# Compile the model.
dl_model %>% compile(
  loss = loss_categorical_crossentropy,
  optimizer = optimizer_adadelta(),
  metrics = c("accuracy"))

# Create the design matrix and dependent variables.
form <- Species ~ . -1
iris_x <- model.matrix(form, iris)
iris_y <- to_categorical(as.numeric(iris$Species) - 1)

# Fit the model.
dl_model %>% fit(
  iris_x,
  iris_y,
  batch_size = 150,
  epoch = 1000,
  validation_split = 0.1)

# Calculate the model accuracy.
dl_acc <-
  apply(predict(dl_model, iris_x), 1, which.max) == as.numeric(iris$Species)
sum(dl_acc) / length(dl_acc)
#> [1] 0.9866667

Code of Conduct

Please note that the ‘envi’ project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.



kaneplusplus/envi documentation built on Jan. 6, 2020, 2:06 p.m.