DominikRafacz/deepdep

Add level column to output of deepdep()

Closed this issue ยท 1 comments

First off, thanks for creating this wonderful package ๐Ÿ‘

When looking at the output of deepdep("ggplot2", depth = 5), it is hard to determine the dependency level after awhile. I propose a simple solution: add a column called level or whatever name you find suitable. If you don't want this by default, a boolean parameter level/include_level could be added with a default value of FALSE.

I looked at the source code for deepdep. Implementation is trivial:

deepdep <- function (package, depth = 1, downloads = FALSE, bioc = FALSE, 
                         local = FALSE, dependency_type = c("Depends", "Imports")) 
{
  check_package_name(package, bioc, local)
  pkg_dep <- get_dependencies(package, downloads, bioc, local, 
                              dependency_type)
  pkg_dep_names <- pkg_dep$name
  if (length(pkg_dep_names)) {
    ret <- data.frame(origin = attr(pkg_dep, "package_name"), 
                      pkg_dep, level = 1)
  }
  else {
    ret <- data.frame(origin = character(), pkg_dep)
  }
  pkg_dep_dep_names <- c()
  already_computed_names <- c(package)
  if (depth > 1) {
    for (i in 2:depth) {
      for (name in pkg_dep_names) {
        pkg_dep_dep <- get_dependencies(name, downloads, 
                                        bioc, local, dependency_type)
        if (length(pkg_dep_dep$name) != 0) {
          pkg_dep_dep_names <- union(pkg_dep_dep_names, 
                                     pkg_dep_dep$name)
          if (length(pkg_dep_dep_names)) {
            temp <- data.frame(origin = attr(pkg_dep_dep, 
                                             "package_name"), pkg_dep_dep, level = i)
          }
          else {
            temp <- data.frame(origin = character(), 
                               pkg_dep_dep, level = integer())
          }
          ret <- rbind(ret, temp)
        }
      }
      already_computed_names <- union(already_computed_names, 
                                      pkg_dep_dep_names)
      pkg_dep_names <- intersect(already_computed_names, 
                                 pkg_dep_dep_names)
      pkg_dep_dep_names <- c()
    }
  }
  attr(ret, "package_name") <- package
  class(ret) <- c("deepdep", "data.frame")
  ret
}

Hi, thanks for the feedback.
This enhancement has already been added today. You can download deepdep v0.2.1 from GitHub using devtools::install_github("DominikRafacz/deepdep") and try it out.