Finding inter-function dependencies within a package
Thanks for the suggestions. Just to wrap up this thread...
Rainer Krug pointed out that Roxygen did have dependency graphs, although
Roxygen2 doesn't. But I guess (probably wrongly!) that I'd need to
process/modify the .R files to use that, and I'm not the package author.
Duncan Murdoch pointed out codetools::findGlobals which can be used to find
functions called by a target function. But I want to find functions calling
a target function.
Mark Bravington pointed out mvbutils::foodweb and callers.of which almost do
what I want (I think it was this I half remembered). But this works in the
namespace of the package, and my target function isn't exported so foodweb
doesn't see it!
Working from Duncan's suggestion I came up with this, not pretty or fast,
could certainly be improved, but it did my one-off job.:
--------------------
# return a character vector of names of functions in 'tarPack' (character)
which directly call the function 'tarFunc' (character)
called.by <- function(tarFunc, tarPack){
require(codetools)
flist <- sapply(lsf.str(tarPack, all=TRUE), c)
names(flist) <- NULL
gotit <- sapply(flist, function(x) tarFunc %in% findGlobals(get(x, tarPack),
FALSE)$functions)
flist[gotit]
}
# e.g.
called.by("CreateMeanFizz", "package:sensory")
------------------------------------------
Thanks again for the input.
Keith Jewell
Hi, I'd like to know which functions in a package call one specific function. I think I've seen a tool for identifying such dependencies, but now I can't find it :-( Searches of help and R site search for keywords like function, call, tree, depend haven't helped :-( Can anyone point me in the right direction? Thanks in advance, Keith Jewell
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel