Identify Global Objects in R Expressions

Identifies global ("unknown" or "free") objects in R expressions by code inspection using various strategies, e.g. conservative or liberal. The objective of this package is to make it as simple as possible to identify global objects for the purpose of exporting them in distributed compute environments.


News

Package: globals

Version: 0.12.4 [2018-10-11]

BUG FIXES:

  • globalsOf() could produce "Error in vapply(where, FUN = envname, FUN.VALUE = NA_character_, USE.NAMES = FALSE) : values must be length 1, but FUN(X[[...]]) result is length ...". This was because the internal envname(env) did not always handle when class(env) != "environment".

Version: 0.12.3 [2018-09-16]

NEW FEATURES:

  • findGlobals(), globalsOf(), and packagesOf() no longer return elements sorted by name.

BUG FIXES:

  • globals::findGlobals() would not identify 'a' as a global in expressions of type 'a[1] = ...' and 'names(a) = ...' although it did for 'a[1] <- ...' and 'names(a) <- ...'.

Version: 0.12.2 [2018-08-25]

PERFORMANCE:

  • cleanup() for Globals should now be much faster. Previously, it could be very slow the first time it was called in a fresh R session, especially if the user had a large number of packages installed and/or the package libraries were on slow drives.

DOCUMENTAITON:

  • Added help for globals::findGlobals().

BUG FIXES:

  • globals::findGlobals(x), where 'x' is a list, iterated over 'x' incorrectly assuming no method dispatching on 'x' would take place. For instance, if 'x' contained an fst::fst_table object, then "Error in .subset2(x, i, exact = exact) : subscript out of bounds" would be produced.

  • globals::findGlobals() could produce a "Warning in is.na(x): is.na() applied to non-(list or vector) of type 'NULL'" in R (< 3.5.0).

Version: 0.12.1 [2018-06-24]

PERFORMANCE:

  • globals::findGlobals() is now significantly faster for elements that are long lists with many elements of basic data types. This is because elements of such basic data type cannot contain globals and can therefore be skipped early in the search for globals.

Version: 0.12.0 [2018-06-12]

NEW FEATURES:

  • Now globals::findGlobals() identifies 'a' as a global also when it is part of LHS expressions of type 'a[1] <- ...' and 'names(a) <- ...'.

BUG FIXES:

  • globals::findGlobals() incorrectly identified 'a' as a global in expression of type 'a <- pkg::a'.

  • If "..." was passed to globalsByName(names), an error would be produced unless it was the last entry in 'names'.

Version: 0.11.0 [2018-01-09]

NEW FEATURES:

o Now findGlobals() identifies 'x' as a global variable in 'x <- x + 1' and likewise for x + 1 -> x. Note that ditto using <<- and ->> was already identifying 'x' as a global.

BUG FIXES:

o findGlobals(..., trace = TRUE) now outputs only to standard error. Previously, some of the output went to standard output.

Version: 0.10.3 [2017-10-12]

BUG FIXES:

o globalsOf(..., recursive = TRUE) would result in "Error in match.fun(FUN) : node stack overflow" if one of the globals identified was a function that called itself recursively (either directly or indirectly).

Version: 0.10.2 [2017-08-08]

BUG FIXES:

  • walkAST() could produce error "Cannot walk expression. Unknown object type '...'" for objects of type 'environment'.

Version: 0.10.1 [2017-07-01]

BUG FIXES:

  • walkAST() could produce error "Cannot walk expression. Unknown object type '...'" for objects of type 'list', 'expression' and 'S4'.

Version: 0.10.0 [2017-04-16]

NEW FEATURES:

  • Globals that are part of a formula are now identified.

  • findGlobals(..., trace = TRUE) will now show low-level parse information as the abstract syntax tree (AST) is walked.

SOFTWARE QUALITY:

  • Enabled more internal sanity checks.

BUG FIXES:

  • walkAST() could produce error "Cannot walk expression. Unknown object type 'nnn'" for expressions of type 'builtin', 'closure' and 'special'.

Version: 0.9.0 [2017-03-09]

NEW FEATURES:

  • Added option 'globals.debug', which when TRUE enables debugging output.

BUG FIXES:

  • globalsOf(..., recursive = TRUE) would in some cases scan an incorrect subset of already identified globals.

  • globalsOf(..., recursive = TRUE) failed to skip objects part of package namespaces that where defined via a local() statement.

Version: 0.8.0 [2017-01-14]

NEW FEATURES:

  • globalsOf() identifies also globals in locally defined functions. This can be disabled with argument recursive = FALSE.

  • findGlobals() now takes both closures (functions) and expressions.

Version: 0.7.2 [2016-12-28]

BUG FIXES:

  • c(x, list()) where x is a Globals object would give an error reporting that the list does not have named elements.

Version: 0.7.1 [2016-10-13]

NEW FEATURES:

  • Globals() and as.Globals() now accepts an empty list as input as well.

BUG FIXES:

  • walkAST(quote( function(x=NULL) 0 )) would give a sanity check error due to the NULL argument. Thank you GitHub user billy34 for reporting on this.

Version: 0.7.0 [2016-09-08]

NEW FEATURES:

  • Added walkAST(), which can be used to tweak expressions.

  • Added globalsByName() for locating and retrieving a set of known global variables.

  • Added c(), $<-(), names(), unique() for Globals objects.

  • Improved as.Globals() for lists.

Version: 0.6.1 [2016-01-31]

NEW FEATURES:

  • Now the error message of globalsOf(..., mustExist=TRUE) when it fails to locate a global also gives information on the expression that is problematic.

BUG FIXES:

  • cleanup() for Globals did not cleanup functions in core package environments named 'package:'.

Version: 0.6.0 [2015-12-12]

NEW FEATURES:

  • findGlobals() is updated to handle the case where a local variable is *verwriting a global one with the same name, e.g. { a <- b; b <- 1 }. Now 'b' is correctly identified as a global object. Previously it would have been missed. For backward compatibility, the previous behavior can be obtained using argument method="conservative".

Version: 0.5.0 [2015-10-13]

NEW FEATURES:

  • globalsOf() now returns attribute 'where' specifying where each global *bject is located.

BUG FIXES:

  • cleanup() now only drops objects that are located in one of the "base" packages; previously it would also drop copies of such objects, e.g. FUN <- base::sample.

Version: 0.4.1 [2015-10-05]

BUG FIXES:

  • globalsOf() failed to return global variables with value NULL. They were identified but silently dropped.

Version: 0.4.0 [2015-09-12]

NEW FEATURES:

  • findGlobals() and globalsOf() gained argument 'dotdotdot'.

Version: 0.3.1 [2015-06-10]

  • More test coverage.

Version: 0.3.0 [2015-06-08]

NEW FEATURES:

  • Renamed getGlobals() to globalsOf().

Version: 0.2.3 [2015-06-08]

NEW FEATURES:

  • Added [() for Globals.

  • findGlobals() and getGlobals() gained argument 'substitute'.

  • Added cleanup(..., method="internals").

Version: 0.2.2 [2015-05-20]

NEW FEATURES:

  • Added Globals class with methods cleanup() and packagesOf(). Added as.Globals() to coerce lists to Globals objects.

Version: 0.2.1 [2015-05-20]

NEW FEATURES:

  • getGlobals() gained argument 'mustExist' for controlling whether to give an error when the corresponding object for an identified global cannot be found or to silently drop the missing global.

  • findGlobals() and getGlobals() gained argument 'method' for controlling whether a "conservative" or a "liberal" algorithm for identifying true globals should be used.

Version: 0.2.0 [2015-05-19]

  • Moved globals function from an in-house package to this package.

Version: 0.1.0 [2015-02-07]

  • Created.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("globals")

0.12.5 by Henrik Bengtsson, 6 months ago


https://github.com/HenrikBengtsson/globals


Report a bug at https://github.com/HenrikBengtsson/globals/issues


Browse source code at https://github.com/cran/globals


Authors: Henrik Bengtsson [aut, cre, cph]


Documentation:   PDF Manual  


LGPL (>= 2.1) license


Imports codetools


Imported by disk.frame, furrr, future, future.apply, parsnip, sparklyr.

Depended on by doFuture.


See at CRAN