Skip to content

Commit

Permalink
Merge pull request #309 from milevavantuyl/locked-binding
Browse files Browse the repository at this point in the history
Address locked binding issue
  • Loading branch information
SSaishruthi authored Jun 24, 2022
2 parents 79a8d02 + 259c226 commit 18f0298
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 44 deletions.
29 changes: 17 additions & 12 deletions aif360/aif360-r/R/import.R
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,21 @@
#'
load_aif360_lib <- function() {
e <- globalenv()
e$datasets <- import("aif360.datasets")
e$metrics <- import("aif360.metrics")
e$pre_algo <- import("aif360.algorithms.preprocessing")
e$in_algo <- import("aif360.algorithms.inprocessing")
e$post_algo <- import("aif360.algorithms.postprocessing")
e$tf <- import("tensorflow")
lockBinding("datasets", e)
lockBinding("metrics", e)
lockBinding("pre_algo", e)
lockBinding("in_algo", e)
lockBinding("post_algo", e)
lockBinding("tf", e)
bindings <- c("datasets", "metrics", "pre_algo", "in_algo", "post_algo", "tf")
if (!all(bindings %in% ls(e))){
e$datasets <- import("aif360.datasets")
e$metrics <- import("aif360.metrics")
e$pre_algo <- import("aif360.algorithms.preprocessing")
e$in_algo <- import("aif360.algorithms.inprocessing")
e$post_algo <- import("aif360.algorithms.postprocessing")
e$tf <- import("tensorflow")
lockBinding("datasets", e)
lockBinding("metrics", e)
lockBinding("pre_algo", e)
lockBinding("in_algo", e)
lockBinding("post_algo", e)
lockBinding("tf", e)
} else {
message("The aif360 functions have already been loaded. You can begin using the package.")
}
}
22 changes: 15 additions & 7 deletions aif360/aif360-r/README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -101,18 +101,15 @@ aif360::install_aif360(envname = "r-test")
```
Note that this step should take a few minutes and the R session will restart.

4) Finally, load the aif360 functions

```
library(aif360)
4) You can now activate your Python environment
```r
reticulate::use_miniconda(condaenv = "r-test", required = TRUE)
load_aif360_lib()
```


## Getting Started

``` r
```r
library(aif360)
load_aif360_lib()
```

Expand All @@ -133,6 +130,17 @@ formatted_dataset <- aif360::aif_dataset(data_path = data,

```

## Troubleshooting

If you encounter any errors during the installation process, look for your issue here and try the solutions.

### Locked binding
If you get an error: `cannot change value of locked binding`, please restart the R session. Then try reactivating your Python environment and running the following commands exactly once:
```r
library(aif360)
load_aif360_lib()
```

## Contributing

If you'd like to contribute to the development of aif360, please read [these guidelines](CONTRIBUTING.md).
Expand Down
57 changes: 32 additions & 25 deletions aif360/aif360-r/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<!-- badges: start -->

[![CRAN\_Status\_Badge](http://www.r-pkg.org/badges/version/aif360)](https://cran.r-project.org/package=aif360)
[![CRAN_Status_Badge](http://www.r-pkg.org/badges/version/aif360)](https://cran.r-project.org/package=aif360)
<!-- badges: end -->

## Overview
Expand All @@ -31,7 +31,7 @@ Or install the development version from GitHub:
devtools::install_github("Trusted-AI/AIF360/aif360/aif360-r")
```

Then, use the install\_aif360() function to install AIF360:
Then, use the install_aif360() function to install AIF360:

``` r
library(aif360)
Expand All @@ -42,7 +42,7 @@ install_aif360()

AIF360 is distributed as a Python package and so needs to be installed
within a Python environment on your system. By default, the
install\_aif360() function attempts to install AIF360 within an isolated
install_aif360() function attempts to install AIF360 within an isolated
Python environment (“r-reticulate”).

You can check using `reticulate::conda_python()` and
Expand All @@ -53,42 +53,36 @@ You can check using `reticulate::conda_python()` and
1) Install reticulate and check if you have miniconda installed. If you
do, go to step 2.

<!-- end list -->

``` r
install.packages("reticulate")
reticulate::conda_list()
```

If you get an error: `Error: Unable to find conda binary. Is Anaconda
installed?`, please install miniconda
If you get an error:
`Error: Unable to find conda binary. Is Anaconda installed?`, please
install miniconda

``` r
reticulate::install_miniconda()
```

If everything worked, you should get the message:

`* Miniconda has been successfully installed at
'/home/rstudio/.local/share/r-miniconda'.`
`* Miniconda has been successfully installed at '/home/rstudio/.local/share/r-miniconda'.`

You can double check:

reticulate::conda_list()

You will get something like this:

```
name python
1 r-miniconda /home/rstudio/.local/share/r-miniconda/bin/python
2 r-reticulate /home/rstudio/.local/share/r-miniconda/envs/r-reticulate/bin/python
```
name python
1 r-miniconda /home/rstudio/.local/share/r-miniconda/bin/python
2 r-reticulate /home/rstudio/.local/share/r-miniconda/envs/r-reticulate/bin/python

2) You can create a new conda env and then configure which version of
Python to use:

<!-- end list -->

``` r
reticulate::conda_create(envname = "r-test")
reticulate::use_miniconda(condaenv = "r-test", required = TRUE)
Expand All @@ -99,34 +93,31 @@ Check that everything is working `reticulate::py_config()`.
3) If you haven’t yet, please install the aif360 package
`install.packages("aif360")` and then install aif360 dependencies

<!-- end list -->

``` r
aif360::install_aif360(envname = "r-test")
```

Note that this step should take a few minutes and the R session will
restart.

4) Finally, load the aif360 functions

<!-- end list -->
4) You can now activate your Python environment

library(aif360)
reticulate::use_miniconda(condaenv = "r-test", required = TRUE)
load_aif360_lib()
``` r
reticulate::use_miniconda(condaenv = "r-test", required = TRUE)
```

## Getting Started

``` r
library(aif360)
load_aif360_lib()
```

``` r
# load a toy dataset
data <- data.frame("feature1" = c(0,0,1,1,1,1,0,1,1,0),
"feature2" = c(0,1,0,1,1,0,0,0,0,1),
"label" = c(1,0,0,1,0,0,1,0,1,1))
"label" = c(1,0,0,1,0,0,1,0,1,1))

# format the dataset
formatted_dataset <- aif360::aif_dataset(data_path = data,
Expand All @@ -138,6 +129,22 @@ formatted_dataset <- aif360::aif_dataset(data_path = data,
protected_attribute = "feature1")
```

## Troubleshooting

If you encounter any errors during the installation process, look for
your issue here and try the solutions.

### Locked binding

If you get an error: `cannot change value of locked binding`, please
restart the R session. Then try reactivating your Python environment and
running the following commands exactly once:

``` r
library(aif360)
load_aif360_lib()
```

## Contributing

If you’d like to contribute to the development of aif360, please read
Expand Down

0 comments on commit 18f0298

Please sign in to comment.