Skip to content

Commit

Permalink
feat: filter (#62)
Browse files Browse the repository at this point in the history
feat: filter (#58)
* feat: first commit filter

* feat: finished client side function

* refactor: changed argument name because  is a core R function

* chore: added correct serverside branch for CI checks

* docs: added filter manual

* feat: added .by argument

* docs: added filter to list of completed functions

* test: finished filter tests

* refactor: corrected default argument

* docs: added missing argument description

* feat: permit additional functions to be passed

* test: expanded permitted function tests for new functions being allowed to pass

* docs: written vignette for filter

* docs: built site

* docs: added example for filter

* docs: built site
  • Loading branch information
timcadman authored Aug 13, 2024
1 parent 6183ccc commit 98d5834
Show file tree
Hide file tree
Showing 14 changed files with 469 additions and 5 deletions.
29 changes: 29 additions & 0 deletions R/ds.filter.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#' @title Keep rows that match a condition
#' @description DataSHIELD implentation of \code{dplyr::filter}.
#' @param df.name Character specifying a serverside data frame or tibble.
#' @param expr Expressions that return a logical value, and are defined in terms of the
#' variables in .data
#' @param .by Optionally, a selection of columns to group by for just this operation, functioning as an alternative to \code{dplyr::group_by}
#' @param .preserve Relevant when the .data input is grouped. If .preserve = FALSE (the default),
#' the grouping structure is recalculated based on the resulting data, otherwise the grouping is
#' kept as is.
#' @param newobj Character specifying name for new server-side data frame.
#' @param datasources DataSHIELD connections object.
#' @return An object with the name specified by the \code{newobj} argument is written serverside.
#' @importFrom DSI datashield.assign datashield.aggregate
#' @examples
#'\dontrun{
#' ds.filter(
#' df.name = "mtcars",
#' expr = list(cyl == 4 & mpg > 20),
#' newobj = "filtered",
#' datasources = conns)
#' }
#' @export
ds.filter <- function(df.name = NULL, expr = NULL, .by = NULL, .preserve = FALSE, newobj = NULL, datasources = NULL) {
tidy_select <- .format_args_as_string(rlang::enquo(expr))
datasources <- .set_datasources(datasources)
.perform_tidyverse_checks(df.name, newobj, tidy_select, datasources)
cally <- .make_serverside_call("filterDS", tidy_select, list(df.name, .by, .preserve))
datashield.assign(datasources, newobj, cally)
}
2 changes: 1 addition & 1 deletion R/utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@
permitted_tidy_select <- c(
"everything", "last_col", "group_cols", "starts_with", "ends_with", "contains",
"matches", "num_range", "all_of", "any_of", "where", "c", "rename", "mutate", "if_else",
"case_when"
"case_when", "mean", "median", "mode"
)

function_names <- str_extract_all(args_as_string, "\\w+(?=\\()", simplify = T)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ Clientside implementation of selected Tidyverse functions
- `case_when`
- `bind_cols`
- `bind_rows`
- `filter`

## Planned functions to implement:
- `filter`
- `inner_join`
- `left_join`
- `right_join`
Expand Down
48 changes: 48 additions & 0 deletions docs/articles/dstidyverse.html

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

2 changes: 1 addition & 1 deletion docs/index.html

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

1 change: 0 additions & 1 deletion docs/pkgdown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@ pkgdown_sha: ~
articles:
dstidyverse: dstidyverse.html
last_built: 2024-08-13T12:35Z

137 changes: 137 additions & 0 deletions docs/reference/ds.filter.html

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

4 changes: 4 additions & 0 deletions docs/reference/index.html

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

3 changes: 3 additions & 0 deletions docs/sitemap.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
<url>
<loc>/reference/ds.case_when.html</loc>
</url>
<url>
<loc>/reference/ds.filter.html</loc>
</url>
<url>
<loc>/reference/ds.if_else.html</loc>
</url>
Expand Down
46 changes: 46 additions & 0 deletions man/ds.filter.Rd

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

Loading

0 comments on commit 98d5834

Please sign in to comment.