> Of course, it would be preferable if didn't need to detach the namespace.

Here's a version only detaches the namespace when necessary:

```r
use <- function(package, include.only) {
    package <- as.character(package)[[1L]]
    if (!requireNamespace(package, quietly = TRUE)) {
        warning("there is no package called ", sQuote(package))
        return (invisible(FALSE))
    }

    if (missing(include.only)) {
        ns <- asNamespace(package, base.OK = FALSE)
        include.only <- getNamespaceExports(ns)
    }

    if (package %in% .packages()) {
        name <- paste0("package:", package)
        previously_attached <- ls(name, all.names = TRUE)
        if (!all(include.only %in% previously_attached)) {
            detach(name, character.only = TRUE)
            include.only <- union(include.only, previously_attached)
            attachNamespace(package, include.only = include.only)
        } # else no need to detach and re-attach
    } else {
        attachNamespace(package, include.only = include.only)
    }
    invisible(TRUE)
}
```

On Fri, May 23, 2025 at 3:40 AM Roland Fuß via R-devel <
r-devel@r-project.org> wrote:

> Hello,
>
> Currently `use` fails silently if you try to attach functions from the
> same namespace. It would be nice and more similiar to the use of
> roxygen2 if it could add (and maybe even remove?) functions. Here is a
> simple proof of concept I have posted on Stack Overflow [1]. Something
> similar could be done within `use`. Of course, it would be preferable if
> it didn't need to detach the namespace.
>
> |use("data.table", "fread") ls("package:data.table") #[1] "fread"
> use("data.table", "nafill") ls("package:data.table") #[1] "fread"
> useplus <- function(package, include.only) { loaded <-
> ls(sprintf("package:%s", package), all.names = TRUE)
> unloadNamespace(package) if (missing(include.only)) { use(package) }
> else { use(package, union(loaded, include.only)) } }
> useplus("data.table", "nafill") ls("package:data.table") #[1] "fread"
> "nafill"|
>
>
> [1] https://stackoverflow.com/q/79633064/1412059
>
> --
> Dr. Roland Fuß
>
> Thünen-Institut für Agrarklimaschutz/
> Thünen Institute of Climate-Smart Agriculture
>
> Bundesallee 65
> D-38116 Braunschweig, Germany
>
> Tel./Webex: ++49 531 25701967
> Email: roland.f...@thuenen.de
>
> Arbeitsgruppe "Emissionsberichterstattung"/
> Working group "Emission Inventories"
> Email: emissionsinvent...@thuenen.de
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to