Skip to content

Commit ab07370

Browse files
committed
Add 'Makefile' and use @importFrom for function level import
* Add 'Makefile' with `docs`, `test`, `check` targets; * Replace `@import` with `@importFrom` for more specific import; * Add quote to avoid 'no visible binding for global variable' warning; Signed-off-by: Tao Wang <twang2218@gmail.com>
1 parent 7af1670 commit ab07370

9 files changed

Lines changed: 118 additions & 30 deletions

.Rbuildignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
^.*\.Rproj$
22
^\.Rproj\.user$
33
^LICENSE\.md$
4+
^doc$
5+
^Makefile$

Makefile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
.PHONY: docs check test
2+
3+
docs:
4+
Rscript -e "devtools::document(); devtools::check_man()"
5+
6+
test:
7+
Rscript -e "devtools::test()"
8+
9+
check:
10+
Rscript -e "devtools::check()"
11+

NAMESPACE

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,25 @@ export(create_event_graph)
44
export(get_attrs_desc)
55
export(get_edges_from_event_logs)
66
export(get_nodes_from_event_logs)
7+
importFrom(DiagrammeR,add_edges_from_table)
8+
importFrom(DiagrammeR,add_global_graph_attrs)
9+
importFrom(DiagrammeR,add_nodes_from_table)
10+
importFrom(DiagrammeR,create_graph)
11+
importFrom(DiagrammeR,delete_nodes_ws)
12+
importFrom(DiagrammeR,get_selection)
13+
importFrom(DiagrammeR,select_nodes_by_degree)
14+
importFrom(DiagrammeR,set_edge_attrs)
15+
importFrom(DiagrammeR,set_node_attrs)
16+
importFrom(data.table,data.table)
17+
importFrom(data.table,rbindlist)
18+
importFrom(dplyr,"%>%")
19+
importFrom(dplyr,arrange)
20+
importFrom(dplyr,distinct)
21+
importFrom(dplyr,group_by)
22+
importFrom(dplyr,mutate)
23+
importFrom(dplyr,mutate_if)
24+
importFrom(dplyr,n)
25+
importFrom(dplyr,rename)
26+
importFrom(dplyr,select)
27+
importFrom(dplyr,summarize)
28+
importFrom(dplyr,ungroup)

R/process_graph.R

Lines changed: 64 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
1-
library(dplyr)
2-
library(data.table)
3-
library(DiagrammeR)
1+
# make 'R CMD check' happy
2+
utils::globalVariables(c(
3+
# get_nodes_from_event_logs()
4+
"event_name",
5+
"is_target",
6+
"name",
7+
# get_edges_from_event_logs()
8+
"customer_id",
9+
"timestamp",
10+
"from",
11+
"to"
12+
))
413

514
#' @title Produce nodes from event logs
615
#'
@@ -13,6 +22,13 @@ library(DiagrammeR)
1322
#' `get_nodes_from_event_logs()` will generate the node list from the given `event_logs` for the graph purpose.
1423
#' However, it is very basic, so, in most cases, you might want to provide your own node list to the
1524
#' `create_event_graph()` function.
25+
#' @return a `data.frame` of nodes
26+
#' @importFrom dplyr %>%
27+
#' @importFrom dplyr select
28+
#' @importFrom dplyr distinct
29+
#' @importFrom dplyr rename
30+
#' @importFrom dplyr mutate
31+
#' @importFrom dplyr arrange
1632
#' @export
1733
get_nodes_from_event_logs <- function(event_logs) {
1834
nodes <- event_logs %>%
@@ -32,6 +48,16 @@ get_nodes_from_event_logs <- function(event_logs) {
3248
#' * `customer_id`: cutomer identifier. (`character`)
3349
#' * `event_name`: event name. (`character`)
3450
#' * `is_target`: whether it's the final stage. (`logical`)
51+
#' @return a `data.frame` of edges
52+
#' @importFrom dplyr %>%
53+
#' @importFrom dplyr arrange
54+
#' @importFrom dplyr group_by
55+
#' @importFrom dplyr summarize
56+
#' @importFrom dplyr ungroup
57+
#' @importFrom dplyr mutate_if
58+
#' @importFrom dplyr n
59+
#' @importFrom data.table data.table
60+
#' @importFrom data.table rbindlist
3561
#' @export
3662
get_edges_from_event_logs <- function(event_logs) {
3763
# sort by customer_id and timestamp
@@ -91,15 +117,30 @@ get_edges_from_event_logs <- function(event_logs) {
91117
}
92118

93119
#' @title Create the event graph by given nodes and edges.
94-
#' @param nodes Event list, which should be a `data.frame` containing following columns:
120+
#' @param nodes Event list
121+
#' @param edges Event transform list
122+
#' @description
123+
#' `nodes` should be a `data.frame` containing following columns:
95124
#' * `name`: Nodes name, will be used as label. (`character`)
96125
#' * `is_target`: Whether it's final stage. (`logical`)
97126
#' * `percentage`: The percentage of customer affected by the given event. (`numeric`)
98-
#
99-
#' @param edges Event transform list, which should be a `data.frame` containing following columns:
127+
#'
128+
#' `edges` should be a `data.frame` containing following columns:
100129
#' * `from`: the begining event of the edge. (`character`)
101130
#' * `to`: the ending event of the edge (`character`)
102131
#' * `value`: How many of customer affected by the given event. (`numeric`)
132+
#' @importFrom dplyr %>%
133+
#' @importFrom dplyr mutate
134+
#' @importFrom dplyr mutate_if
135+
#' @importFrom DiagrammeR create_graph
136+
#' @importFrom DiagrammeR add_nodes_from_table
137+
#' @importFrom DiagrammeR add_edges_from_table
138+
#' @importFrom DiagrammeR add_global_graph_attrs
139+
#' @importFrom DiagrammeR set_node_attrs
140+
#' @importFrom DiagrammeR set_edge_attrs
141+
#' @importFrom DiagrammeR select_nodes_by_degree
142+
#' @importFrom DiagrammeR get_selection
143+
#' @importFrom DiagrammeR delete_nodes_ws
103144
#' @export
104145
create_event_graph <- function(nodes, edges) {
105146
# print("Converting factor to character [nodes]...")
@@ -125,15 +166,15 @@ create_event_graph <- function(nodes, edges) {
125166
p <- p %>%
126167
add_nodes_from_table(
127168
table = nodes,
128-
label_col = name
169+
label_col = "name"
129170
)
130171

131172
# print("add_edges_from_table()")
132173
p <- p %>% add_edges_from_table(
133174
table = edges,
134-
from_col = from,
135-
to_col = to,
136-
ndf_mapping = name)
175+
from_col = "from",
176+
to_col = "to",
177+
ndf_mapping = "name")
137178

138179
# print("add_global_graph_attrs()")
139180
p <- p %>%
@@ -154,31 +195,31 @@ create_event_graph <- function(nodes, edges) {
154195
p <- p %>%
155196
# node attributes
156197
## grey900(#212121)
157-
set_node_attrs(node_attr = fontcolor, values = "#212121") %>%
198+
set_node_attrs(node_attr = "fontcolor", values = "#212121") %>%
158199
## lightBlue900(#01579B)
159-
set_node_attrs(node_attr = color, values = "#01579B") %>%
200+
set_node_attrs(node_attr = "color", values = "#01579B") %>%
160201
## lightBlue100(#B3E5FC) => lightBlue50(#E1F5FE)
161-
set_node_attrs(node_attr = fillcolor, values = "#B3E5FC:#E1F5FE") %>%
162-
set_node_attrs(node_attr = fontsize, values = (nodes$percentage * 15 + 5)) %>%
163-
set_node_attrs(node_attr = label, values = nodes$name) %>%
164-
set_node_attrs(node_attr = tooltip, values = nodes$tooltip)
202+
set_node_attrs(node_attr = "fillcolor", values = "#B3E5FC:#E1F5FE") %>%
203+
set_node_attrs(node_attr = "fontsize", values = (nodes$percentage * 15 + 5)) %>%
204+
set_node_attrs(node_attr = "label", values = nodes$name) %>%
205+
set_node_attrs(node_attr = "tooltip", values = nodes$tooltip)
165206

166207
# print("set_edge_attrs() for target nodes")
167208
target_ids <- nodes[nodes$is_target, "index"]
168209
p <- p %>%
169210
## deepOrange900(#BF360C)
170-
set_node_attrs(node_attr = color, values = "#BF360C", nodes = target_ids) %>%
211+
set_node_attrs(node_attr = "color", values = "#BF360C", nodes = target_ids) %>%
171212
## deepOrange100(#FFCCBC):deepOrange50(#FBE9E7)
172-
set_node_attrs(node_attr = fillcolor, values = "#FFCCBC:#FBE9E7", nodes = target_ids) %>%
173-
set_node_attrs(node_attr = fontsize, values = (nodes$percentage * 10 + 15), nodes = target_ids)
213+
set_node_attrs(node_attr = "fillcolor", values = "#FFCCBC:#FBE9E7", nodes = target_ids) %>%
214+
set_node_attrs(node_attr = "fontsize", values = (nodes$percentage * 10 + 15), nodes = target_ids)
174215

175216
# print("set_edge_attrs()")
176217
p <- p %>%
177218
# Edge attributes
178-
set_edge_attrs(edge_attr = penwidth, values = log10(edges$value) + 1) %>%
179-
set_edge_attrs(edge_attr = label, values = edges$value) %>%
180-
set_edge_attrs(edge_attr = tooltip, values = edges$tooltips) %>%
181-
set_edge_attrs(edge_attr = labeltooltip, values = edges$tooltips)
219+
set_edge_attrs(edge_attr = "penwidth", values = log10(edges$value) + 1) %>%
220+
set_edge_attrs(edge_attr = "label", values = edges$value) %>%
221+
set_edge_attrs(edge_attr = "tooltip", values = edges$tooltips) %>%
222+
set_edge_attrs(edge_attr = "labeltooltip", values = edges$tooltips)
182223

183224
# remove node without edges
184225
zero_degree_nodes <- p %>% select_nodes_by_degree("deg == 0") %>% get_selection()

man/create_event_graph.Rd

Lines changed: 9 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/get_edges_from_event_logs.Rd

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/get_nodes_from_event_logs.Rd

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/testthat/test.R

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ test_that("Create a full graph", {
4646
# print("create_process_graph()")
4747
p <- create_event_graph(data$events, edges)
4848

49-
edges_from_graph <- get_edge_df(p)
49+
edges_from_graph <- DiagrammeR::get_edge_df(p)
5050
expect_equal(nrow(edges), nrow(edges_from_graph))
5151

5252
# print("render_graph()")
53-
expect_true(!any(is.null(render_graph(p))))
54-
# print(render_graph(p))
53+
expect_true(!any(is.null(DiagrammeR::render_graph(p))))
54+
# print(DiagrammeR::render_graph(p))
5555
})

tests/testthat/test_get_attrs_desc.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
library(pmv)
2+
library(data.table)
23

34
context("get_attrs_desc()")
45

0 commit comments

Comments
 (0)