Save a tour path so it can later be displayed in many different ways.

save_history(
  data,
  tour_path = grand_tour(),
  max_bases = 100,
  start = NULL,
  rescale = TRUE,
  sphere = FALSE,
  step_size = Inf,
  ...
)

Arguments

data

matrix, or data frame containing numeric columns

tour_path

tour path generator

max_bases

maximum number of new bases to generate. Some tour paths (like the guided tour) may generate less than the maximum.

start

starting projection, if you want to specify one

rescale

if true, rescale all variables to range [0,1]?

sphere

if true, sphere all variables

step_size

distance between each step - defaults to Inf which forces new basis generation at each step.

...

additional arguments passed to tour path

Examples

# You can use a saved history to replay tours with different visualisations

t1 <- save_history(flea[, 1:6], max = 3)
#> Converting input data to the required matrix format.
animate_xy(flea[, 1:6], planned_tour(t1))
#> Converting input data to the required matrix format.
#> Using half_range 0.98

## andrews_history(t1)
## andrews_history(interpolate(t1))

t1 <- save_history(flea[, 1:6], grand_tour(4), max = 3)
#> Converting input data to the required matrix format.
animate_pcp(flea[, 1:6], planned_tour(t1))
#> Converting input data to the required matrix format.

animate_scatmat(flea[, 1:6], planned_tour(t1))
#> Converting input data to the required matrix format.



t1 <- save_history(flea[, 1:6], grand_tour(1), max = 3)
#> Converting input data to the required matrix format.
animate_dist(flea[, 1:6], planned_tour(t1))
#> Converting input data to the required matrix format.
#> Using half_range 0.98


testdata <- matrix(rnorm(100 * 3), ncol = 3)
testdata[1:50, 1] <- testdata[1:50, 1] + 10
testdata <- sphere_data(testdata)
t2 <- save_history(testdata, guided_tour(holes(), max.tries = 100),
  max = 5, rescale = FALSE
)
#> Value  0.899   1.8 % better  - NEW BASIS
#> Value  0.899   1.8 % better  - NEW BASIS
#> Value  0.899   0.0 % better 
#> Value  0.899   0.0 % better 
#> Value  0.900   0.1 % better 
#> Value  0.900   0.1 % better  - NEW BASIS
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> Value  0.900   0.0 % better 
#> No better bases found after 100 tries.  Giving up.
#> Final projection: 
#> 0.643  0.762  
#> -0.649  0.594  
#> -0.407  0.257  
animate_xy(testdata, planned_tour(t2))
#> Using half_range 0.75


# Or you can use saved histories to visualise the path that the tour took.
plot(path_index(interpolate(t2), holes()))

plot(path_curves(interpolate(t2)))