Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
jimrothstein committed Sep 18, 2024
1 parent a6b016b commit 75dbdb7
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 267 deletions.
328 changes: 64 additions & 264 deletions envir/9009_namespace_example.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -17,305 +17,105 @@ execute:
##-------------------------------------


## all attached packages vs search()
## HELP
```{r}
(.packages())
search()
apropos("environment")
apropos("namespace")
```

### getNamespace, returns environment
### all installed packages
```{r}
?help.start
?getAnywhere
argsAnywhere(derive_params)
getAnywhere(filter)
getAnywhere(ae)
library(pkgload)
getNamespace("admiral") # namespace::admiral
installed.packages()
installed.packages() |> class()
ls()
```
### objects in NameSpace
```{r}
ls(getNamespace("dplyr"))
ls(getNamespace("admiral"))

```
### test, is object in ns?
## all attached packages vs search()
```{r}
z=ls(getNamespace("admiral"))
(.packages()) #22
search() #24
z=paste0("package:", .packages())
c("slice_derivation") %in% z # TRUE
```
z %in% search()
search()[!z %in% search()]
search()[!z %in% search()]
base::setdiff(z, search())
```

### ds in pkg
### getAnywhere (examine all loaded NS)
```{r}
data() # all loaded ds
data(package = "admiral") # load ds in this pkg
search()
c("admiral_adlb") %in% z
?getAnywhere
argsAnywhere(derive_params)
getAnywhere(filter)
getAnywhere(ae)
library(admiral)
# fct in pkg admiral
getAnywhere("count_vals")
getAnywhere(count_vals)
### char[] loaded namespaces
```{r}
loadedNamespaces()
sort(loadedNamespaces())
argsAnywhere(derive_params)
getAnywhere(filter)
getAnywhere(ae)
?loadedNamespaces
requireNamespace("teal")
# fct in pkg admiral
getAnywhere("count_vals")
getAnywhere(count_vals)
```
### unloadNamespace

## getNamespace, returns environment
```{r}
unloadNamespace("teal") # and removes search()
unloadNamespace("teal.slice")
loadedNamespaces()
search()


# put it back in.
library(teal)


?help.start
library(pkgload)
getNamespace("admiral") # Loads NS for admiral
isNamespaceLoaded("admiral")
unloadNamespace("admiral")
```
### Given a ds, find package, pkg must be at least loaded
```{r}
?pharmaversesdtm
?admiral

loadNamespace("pharmaversesdtm")
search()
loadedNamespaces()
data(package = "pharmaversesdtm") # loads
### objects in NameSpace
```{r}
ls(getNamespace("dplyr"))
?ae
help(ae)
findAnywhere("ae")
## Need better way ...
ls(getNamespace("admiral")) == "count_vals" # T
getAnywhere("count_vals")
unloadNamespace("pharmaversesdtm")
```
### Given a package
### test, is object in ns?
```{r}
z=ls(getNamespace("admiral"))
library(pharmaversesdtm)
help("ae")
data(package="pharmaversesdtm") # many
data(package="pharmaversesdtm") |> class() # packageIQR?

ls(getNamespace("pharmaversesdtm"))


```
?getNamespaceExports()
getNamespaceExports("dplyr") # 285
getNamespaceExports("admiral") # 285
"db_commit" %in% getNamespaceExports("admiral") # 285
get
?getNamespace
# returns named data.frame x, freq
getNamespaceExports("dplyr") %>% length()
## ?
root <- rprojroot::is_r_package
root
root$find_file()
root$find_file("DESCRIPTION")
root$find_file("09009_namespace_example.Rmd")
c("slice_derivation") %in% z # TRUE
```

# PURPOSE: misc tools for env, NS (namespace)
- getAnywhere()
- exists()
- makeActiveBinding
- assign()

## assign variable x value in current env()
### Find data(), class packageIRQ
```{r}
ls()
assign("x", 10) # x must be quoted
ls() # x in envi
x # 10
search()
# returns obj of class packageIRQ
data() |> class()
# data in one package
data(package = "tidyr")
# data in one package (not loaded)
isNamespaceLoaded("broom") # F
data(package = "broom")
isNamespaceLoaded("broom") # F
```
## now assign higher in search()
## does not work
```{r}
x=10
assign("x", 100, "ESSR", inherits=T)
ls(parent.env(environment()))
getAnywhere(x)
search()

## Given an object, base::getAnywhere() finds pkg, NS, and code
### Find all 'loaded' ds? means ...?
```{r}


utils::getAnywhere(aes)
getAnywhere(vapply)
getAnywhere(getAnywhere)
getAnywhere(.rs.restart)
getAnywhere(ae)
getAnywhere(sv)

```
## Code to probe namespace
REF: R-pkg v2
NAMESPACE
chapter 11

compare search() before/after adding package.
* before
* after loading a package

```{r search}
##-------------------------------------
### search path (shows attached pkgs)
##-------------------------------------
#
old <- search()
old
### ds in pkg
```{r}
data() # all loaded ds
data(package = "admiral") # ds in package admiral; will NOT load NS admiral
ls(getNamespace("admiral")) # will load NS admiral
# will not attach admiral
admiral::ae_event
search()
base::setdiff(search(),old)
##-------------------------------------
# To load AND attach
##-------------------------------------
library(tinytest)
new <- search()
```
```{r namespaces}
# show loaded
?loadedNamespaces
loadedNamespaces()
isNamespaceLoaded("admiral")


# search vs attached? same?
attached_pkgs <- sub(pattern="package:", replacement="", x=search())
attached_pkgs
search()

setdiff(attached_pkgs, loadedNamespaces())
```
## Attached, Loaded
sessionInfo()
## Loaded and attached:
### To load/unload namespace
* library("pkg") # loads and attaches
* loadNamespace(pkg) # does NOT attach
```{r load_namespace }

# setdiff(x, y) # lists elements in x, but not in y

x <- c(0,1)
y <- c(0,1,2)
setdiff(x, y) # no elements in x, but not in y
setdiff(y, x)

old <- loadedNamespaces()
old

# load, NOT attach (Usually not done this way, library() will load and attach)
loadNamespace("jimTools")
new <- loadedNamespaces()
new
base::setdiff(new, old)

# unload (detach 1st)

# longley

library(jimTools)
search()
unloadNamespace("jimTools")
search()
tinytest::expect_false("jimTools" %in% search())

loadedNamespaces()

setdiff(old, loadedNamespaces())




```
### detach pkg
* default, leaves loaded
* use unload=TRUE to detach & unload
```{r detach}

search()
library("fs")
old <- search()

detach("package:fs", unload = FALSE )
setdiff(old, search())
```
NEXT:
```{r detach2}

# ------- detach #2 ----------
# if ( <cond>, TRUE, FALSE )
check <- function(pkg)
ifelse((pkg %in% search()), paste0(pkg," is in search"), paste0(pkg, " is NOT in search"))


pkg = "package:fs"
check(pkg)
loadedNamespaces()

library("fs")
check(pkg)
loadedNamespaces()

if("package:fs" %in% search()) detach("package:fs", unload=FALSE)
check(pkg)

check(pkg)
unloadNamespace(pkg)
check(pkg)
```
### HOOKS
.onLoad
.onLoad(libname, pkgname)
.onAttach(libname, pkgname)
.onUnload(libpath)
.onDetach(libpath)
.Last.lib(libpath)
```{r hooks, eval = FALSE }

.onLoad <- function(libname, pkgname) message ("loading")

.onLoad(.libPaths(), "ggplot2")


# Loads (returns t/f) does NOT attach
(requireNamespace("ggplot2"))
search() # no change

```
unloadNamespace("admiral")
data("admiral_adsl") # not found
data("ae") # not found
ls(getNamespace("pharmaversesdtm"))
6 changes: 3 additions & 3 deletions try_things_here.Rproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Version: 1.0

RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default
RestoreWorkspace: No
SaveWorkspace: No
AlwaysSaveHistory: Yes

EnableCodeIndexing: Yes
UseSpacesForTab: Yes
Expand Down

0 comments on commit 75dbdb7

Please sign in to comment.