findEntry searches recursive objects for components matching a condition. namePattern creates a test of whether the component name matches a pattern. hasClass creates a test of whether the component has a class.

findEntry(x, test, ..., path = c())
namePattern(pattern)
hasClass(class)

Arguments

x

The recursive object to search.

test

A test function. See Details below.

pattern

A regexp pattern to match the desired name(s).

class

A class name to search for.

...

Optional additional arguments to pass to the test function.

path

For internal use: names to prepend to the path.

Details

Utility/debugging functions to search a large recursive object for a particular component name or class.

The test function should have header function(name, value), and may include other arguments which will be taken from ....

Value

findEntry returns a list with one entry per hit. Each entry in the list is a named vector giving the path to the hit, numerically in the values, and as an R expression by concatenating the names. The test functions will be passed single names and values, and should return a single logical result.

Examples

x <- list( a = list( b = list(c(d="A", e="B"), 1L, 1:3)))
locations <- findEntry(x, namePattern("e"))
locations
#> [[1]]
#>    $a    $b [[1]] ['e'] 
#>     1     1     1     2 
#> 

#This shows how the result can be used:
x[[locations[[1]]]]
#> [1] "B"
expr <- paste0(c("x", names(locations[[1]])), collapse = "")
expr
#> [1] "x$a$b[[1]]['e']"
eval(parse(text=expr))
#>   e 
#> "B" 

findEntry(x, hasClass("integer"))
#> [[1]]
#>    $a    $b [[2]] 
#>     1     1     2 
#> 
#> [[2]]
#>    $a    $b [[3]] 
#>     1     1     3 
#>