R: Get all global objects of an expression

globalsOf {globals} | R Documentation

## Get all global objects of an expression

### Description

Get all global objects of an expression

### Usage

    globalsOf(expr, envir = parent.frame(), ..., method = c("ordered",
      "conservative", "liberal"), tweak = NULL, substitute = FALSE,
      mustExist = TRUE, unlist = TRUE, recursive = TRUE)

### Arguments

`expr` | An R expression.
`envir` | The environment from where to search for globals.
`...` | Not used.
`method` | A character string specifying what type of search algorithm to use.
`tweak` | An optional function that takes an expression and returns a tweaked expression.
`substitute` | If TRUE, the expression is `substitute()`:ed, otherwise not.
`mustExist` | If TRUE, an error is thrown if the object of the identified global cannot be located. Otherwise, the global is not returned.
`unlist` | If TRUE, a list of unique objects is returned. If FALSE, a list of `length(expr)` sublists.
`recursive` | If TRUE, globals that are closures (functions) and that exist outside of namespaces ("packages"), will be recursively scanned for globals.

### Details

There currently three methods for identifying global objects.

The `"ordered"` search method identifies globals such that a global variable preceding a local variable with the same name is not dropped (which the `"conservative"` method would).

The `"conservative"` search method tries to keep the number of false positive to a minimum, i.e. the identified objects are most likely true global objects. At the same time, there is a risk that some true globals are not identified (see example). This search method returns the exact same result as the `findGlobals()` function of the codetools package.

The `"liberal"` search method tries to keep the true-positive ratio as high as possible, i.e. the true globals are most likely among the identified ones. At the same time, there is a risk that some false positives are also identified.

With `recursive = TRUE`, globals part of locally defined functions will also be found, otherwise not.

### Value

A Globals object.

### See Also

Internally, the codetools package is utilized for code inspections.

### Examples

    b <- 2
    expr <- substitute({ a <- b; b <- 1 })

    ## Will _not_ identify 'b' (because it's also a local)
    globalsC <- globalsOf(expr, method = "conservative")
    print(globalsC)

    ## Will identify 'b'
    globalsL <- globalsOf(expr, method = "liberal")
    print(globalsL)

[Package globals version 0.10.2 Index]