## ----eval = FALSE------------------------------------------------------------- # library(PackageA) # library(PackageB) # # value1 <- function_a(...) # Supposedly this comes from PackageA, # value2 <- function_b(...) # and this from PackageB, but who knows?! # ... ## ----eval = FALSE------------------------------------------------------------- # function_a <- PackageA::function_a # function_b <- PackageB::function_b ## ----eval=FALSE--------------------------------------------------------------- # import::from(psych, geometric.mean, harmonic.mean) # geometric.mean(trees$Volume) ## ----eval=FALSE--------------------------------------------------------------- # import::from(dplyr, select, arrange, keep_when = filter) # keep_when(mtcars, hp>250) ## ----eval=FALSE--------------------------------------------------------------- # import::from(dplyr, keep_when = filter, .all=TRUE) ## ----eval=FALSE--------------------------------------------------------------- # import::from(dplyr, .except=c("filter", "lag")) ## ----eval = FALSE------------------------------------------------------------- # import::from(magrittr, "%>%") # import::from(dplyr, starwars, select, mutate, keep_when = filter) # import::from(tidyr, unnest) # import::from(broom, tidy) # # ready_data <- # starwars %>% # keep_when(mass < 100) %>% # select(name, height, mass, films) %>% # unnest(films) %>% # mutate( log_mass = log(mass), films=factor(films)) # # linear_model <- # lm(log_mass ~ height + films, data = ready_data) %>% # tidy ## ----eval=FALSE--------------------------------------------------------------- # import::from(sequence_module.R, fibonacci, square, triangular) ## ----eval=FALSE--------------------------------------------------------------- # import::from(sequence_module.R, fib=fibonacci, .except="square") ## ----eval=FALSE--------------------------------------------------------------- # ## Do not use library() inside a module. This results in a warning, # ## and functions relying on ggplot2 will not work. # #library(ggplot2) # # ## This is also not recommended, because it is not clear wether recursively # ## imported functions should be available after the module is imported # #import::here(qplot, .from = ggplot2) # # ## This is the recommended way to recursively import functions on which # ## module functions depend. The qplot function will be available to # ## module functions, but will not itself be available after import # import::here(qplot, .from = ggplot2) # # ## Note this operator overload is not something you want to `source`! # `+` <- function(e1, e2) # paste(e1, e2) # # ## Some function relying on the above overload: # a <- function(s1, s2) # s1 + rep(s2, 3) # # ## Another value. # b <- head(iris, 10) # # ## A value created using a recursively imported function # p <- qplot(Sepal.Length, Sepal.Width, data = iris, color = Species) # # ## A function relying on a function exposed through attachment: # plot_it <- function() # qplot(Sepal.Length, Sepal.Width, data = iris, color = Species) ## ----eval=FALSE--------------------------------------------------------------- # import::from(some_module.R, a, b, p, plot_it) # # ## Works: # a("cool", "import") # # ## The `+` is not affecting anything here, so this won't work: # # "cool" + "import" # # # Works: # b # p # plot_it() ## ----eval=FALSE--------------------------------------------------------------- # # File: foo.R # # Desc: Functionality related to foos. # # Imports from other_resources.R # # When recursively importing from another module or package for use by # # your module functions, you should always use import::here() rather # # than import::from() or library() # import::here(fun_a, fun_b, .from = "other_resources.R") # # internal_fun <- function(...) ... # # fun_c <- function(...) # { # ... # a <- fun_a(...) # i <- internal_fun(...) # ... # } # # fun_d <- function(...) ... ## ----eval = FALSE------------------------------------------------------------- # # File: bar.R # # Desc: Functionality related to bars. # # Imports from foo.R # import::here(fun_c, .from = "foo.R") # ... ## ----eval = FALSE------------------------------------------------------------- # import::from(magrittr, "%>%", "%$%", .into = "operators") # import::from(dplyr, arrange, .into = "datatools") # import::from(psych, describe, .into=month.name[1]) # Uses env: "January" ## ----eval = FALSE------------------------------------------------------------- # import::into("operators", "%>%", "%$%", .from = magrittr) # import::into("datatools", arrange, .from = dplyr) # import::into(month.name[1], describe, .from=psych) ## ----eval = FALSE------------------------------------------------------------- # import::here("%>%", "%$%", .from = magrittr) # import::here(arrange, .from = dplyr) ## ----eval = FALSE------------------------------------------------------------- # # Import into the local environment # import::into(environment(), "%>%", .from = magrittr) # # # Import into the global environment, curlies are optional # import::into({.GlobalEnv}, "%>%", "%$%", .from = magrittr) # # # Import into a new environment, mainly useful for python-style imports # # (see below) # x = import::into(new.env(), "%<>%", .from = magrittr) ## ----eval = FALSE------------------------------------------------------------- # objects <- c("tidy", "glance", "augment") # import::from("broom", objects, .character_only=TRUE) ## ----eval = FALSE------------------------------------------------------------- # objects <- setdiff(getNamespaceExports("dplyr"), c("filter","lag")) # import::from("dplyr", objects, .character_only=TRUE) ## ----eval = FALSE------------------------------------------------------------- # mymodule <- file.path(mypath, "module.R") # import::from(mymodule, "myfunction", .character_only=TRUE) ## ----eval = FALSE------------------------------------------------------------- # import::from(here::here("src/utils/module.R")), "myfunction", .character_only=TRUE) ## ----eval = FALSE------------------------------------------------------------- # import::from(module.R, "myfunction", here::here("src/utils")) ## ----eval = FALSE------------------------------------------------------------- # url <- "https://raw.githubusercontent.com/rticulate/import/master/man/examples/plusone_module.R" # import::from(pins::pin(url), "myfunc", .character_only=TRUE) # myfunc(3) # #> [1] 4 ## ----eval = FALSE------------------------------------------------------------- # # Import into a new namespace, use $ to access # td <- import::from(tidyr, spread, pivot_wider, .into={new.env()}) # dp <- import::from(dplyr, .all=TRUE, .into={new.env()}) # dp$select(head(cars),dist) # #> dist # #> 1 2 # #> 2 10 # #> 3 4 # #> 4 22 # #> 5 16 # #> 6 10 # # # Note that functions are not visible without dp$ prefix # select(head(cars),dist) # #> Error in select(head(cars), dist): could not find function "select" ## ----eval = FALSE------------------------------------------------------------- # # foo.r # # functions with great foonctionality # foo = function(x){ # UseMethod("foo", x) # } # # foo.numeric <- function(x){ # x + 1 # } # # foo.character <- function(x){ # paste0("_", x, "_") # } ## ----eval = FALSE------------------------------------------------------------- # import::from("foo.r", foo, .S3=TRUE) # # foo(0) # 1 # foo("bar") # _bar_