Skip to content

Commit 07e711b

Browse files
committed
Have trace_replace() handle case where path doesn't already exist
1 parent b7dd203 commit 07e711b

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

R/style.R

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,16 @@ style <- function(p, ..., traces = NULL) {
6161
p
6262
}
6363

64-
#' @param path character vector of path elements: c("marker", "line", "size")
64+
#' @param trace a single plotly trace
65+
#' @param path character vector of path elements pointing to a trace property: c("marker", "line", "size")
66+
#' @param value a value to assign to that trace property
6567
trace_replace <- function(trace, path, value) {
6668
if (length(path) == 0) return(trace)
6769
if (length(path) == 1) {
6870
trace[[path]] <- value
6971
return(trace)
7072
}
73+
trace[[path[1]]] <- trace[[path[1]]] %||% setNames(list(NULL), path[2])
7174
trace[[path[1]]] <- trace_replace(trace[[path[1]]], path[-1], value)
7275
trace
7376
}

tests/testthat/test-style.R

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,12 @@ test_that("Partial update works as expected", {
5454
trace_new <- trace_replace(trace, c("marker", "line", "width"), 10)
5555
trace$marker$line$width <- 10
5656
expect_equal(trace_new, trace)
57+
58+
trace <- list(
59+
x = 1:5,
60+
y = 6:10
61+
)
62+
trace_new <- trace_replace(trace, c("marker", "line", "width"), 10)
63+
trace$marker$line$width <- 10
64+
expect_equal(trace_new, trace)
5765
})

0 commit comments

Comments
 (0)