Help us understand the problem. What is going on with this article?

インストールされてる R パッケージの依存関係を可視化する #rstatsj

More than 5 years have passed since last update.

インストールされてる R パッケージの依存関係を可視化できたら楽しいだろうなと思ってやってみました。

R
library("dplyr")
library("pforeach")
library("stringr")
library("igraph")

data1 <- installed.packages() %>% 
  data.frame %>% filter(is.na(Priority))

to_canonical <- function(pkg_names) {
  pkgs <- Map(function(x) str_split(x, " ")[[1]][1], pkg_names) %>% 
    unlist %>% unname
  pkgs[pkgs %in% data1$Package]
}

to_pkg <- function(pkg_str) {
  str_split(pkg_str, ",") %>% 
    Map(str_trim, .) %>% 
    Map(to_canonical, .) %>% 
    Map(function(x) paste(x, collapse=","), .) %>% 
    unlist
}

data <- data1 %>% 
  mutate(Depends=to_pkg(Depends), Imports=to_pkg(Imports)) %>% 
  filter(Depends != "" | Imports != "") %>% 
  select(Package, Depends, Imports)

node_num <- data.frame(pkg_name=data$Package, node_num=seq_along(data$Package))

to_node_num <- function(str) {
  if(str == "") {
    c()
  } else {
    pkgs <- str_split(str, ",")[[1]] %>%
      unlist %>% unname
    d <- node_num %>% filter(pkg_name %in% pkgs)
    d$node_num
  }
}

npforeach(row=rows(data), i=irows(data))({
  imports <- to_node_num(row$Imports)
  depends <- to_node_num(row$Depends)
  pkg_nodes <- c(imports, depends)
  npforeach(node=pkg_nodes)({
    c(node, i)
  })
}) -> result

g <- graph(result)

plot(g,
     vertex.size=15, #ノードの大きさ
     vertex.label=as.character(data$Package), #ノード属性nameをノードラベルにする。
     vertex.color="Pink", #ノード属性Factionを用いてノードに色づけ
     vertex.label.color="gray50", #ノードのラベルの色
     vertex.label.font=2, #ノードのラベルのスタイル 1: 普通, 2: 太字, 3: 斜体, 4: 太字斜体, 5: ギリシャ文字
     vertex.frame.color="white", #ノードの枠の色
     vertex.label.cex=0.6, #ノードラベルの文字サイズ
     edge.color="gray80", #エッジの色
     edge.width=3,
     edge.arrow.mode="-",
     layout=layout.fruchterman.reingold) #ネットワークのレイアウト手法

Rplot06.png

Enjoy!

hoxo_m
ホクソエム (hoxo_m) は架空のデータ分析者であり、日本の若手のデータ分析者集団のペンネームである。当初このデータ分析者集団は秘密結社として活動し、ホクソエムを一個人として活動させ続けた。
https://blog.hoxo-m.com/
hoxom
Machine Learning and Data Analysis Company for Your Smiles :)
http://hoxo-m.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away