CRAN Package Check Results for Package loon

Last updated on 2018-02-20 13:49:58 CET.

Flavor Version Tinstall Tcheck Ttotal Status Flags
r-devel-linux-x86_64-debian-clang 1.1.0 7.07 406.53 413.60 OK
r-devel-linux-x86_64-debian-gcc 1.1.0 7.20 293.20 300.40 OK
r-devel-linux-x86_64-fedora-clang 1.1.0 139.86 ERROR
r-devel-linux-x86_64-fedora-gcc 1.1.0 135.70 ERROR
r-devel-windows-ix86+x86_64 1.1.0 16.00 142.00 158.00 OK
r-patched-linux-x86_64 1.1.0 4.31 427.54 431.85 OK
r-patched-solaris-x86 1.1.0 854.30 OK
r-release-linux-x86_64 1.1.0 4.02 439.55 443.57 OK
r-release-windows-ix86+x86_64 1.1.0 11.00 195.00 206.00 OK
r-release-osx-x86_64 1.1.0 ERROR
r-oldrel-osx-x86_64 1.1.0 ERROR

Check Details

Version: 1.1.0
Check: package dependencies
Result: NOTE
    Package suggested but not available for checking: ‘RDRToolbox’
Flavors: r-devel-linux-x86_64-fedora-clang, r-devel-linux-x86_64-fedora-gcc, r-release-osx-x86_64

Version: 1.1.0
Check: tests
Result: ERROR
     Running ‘demos.R’ [22s/27s]
     Running ‘testthat.R’
    Running the tests in ‘tests/demos.R’ failed.
    Complete output:
     > ## as in the rgl package
     >
     > library(loon)
     Loading required package: tcltk
     >
     > # options(demo.ask=FALSE)
     >
     > is_windows <- Sys.info()['sysname'] == "Windows"
     >
     > for(demo in demo(package="loon")$results[,"Item"]) {
     + if (!(demo %in% c("loon", "lsystem"))) {
     + # on windows all the image resizing seem to use up too much memory
     + # when all the demos are run sequentially
     + if (!(is_windows && grepl("^l_ng_", demo))) {
     + demo(demo, package="loon", character.only=TRUE)
     + }
     + }
     + }
    
    
     demo(l_add_regressions)
     ---- ~~~~~~~~~~~~~~~~~
    
     > # Define a function addRegressionLines that takes a scatterplot
     > # handle as argument and creates a GUI to fit regression lines
     > # of a specific order to the selected points
     >
     > local({
     +
     + addRegressionLinesGUI <- function(p) {
     + force(p)
     + addRegressionLine <- function() {
     + sel <- p['selected']
     + if (sum(sel)==0) return()
     + xs <- p['x'][sel]; ys <- p['y'][sel]
     + fit <- lm(ys ~ poly(xs, as.numeric(tclvalue(degree))))
     + xrng <- seq(min(xs), max(xs), length.out = 20)
     + ypred <- predict(fit, newdata=data.frame(xs = xrng))
     + l_layer_line(p, x=xrng, y=ypred, color=as.character(color),
     + linewidth = 4, index=0, label=paste("degree", tclvalue(degree)))
     + l_configure(p, color=color, glyph='ocircle', which=sel)
     + }
     +
     + updateColor <- function() {
     + col <- as.character(tcl('tk_chooseColor', initialcolor=color))
     + if (col!='') {
     + tkconfigure(b_col, bg=col, activebackground=col)
     + color <<- col
     + }
     + }
     +
     + tt <- tktoplevel()
     + tktitle(tt) <- 'Add Regression Line'
     + degree <- tclVar('1')
     + color <- 'red'
     + s <- tkscale(tt, orient='horizontal', variable=degree,
     + from=1, to=8, resolution=1)
     + b_col <- tkbutton(tt, bg=color, activebackground=color, command=updateColor)
     + b_add <- tkbutton(tt, text='add', command=addRegressionLine)
     + tkgrid(tklabel(tt, text='degree:'), s, b_col, b_add, sticky='s', pady=5)
     + tkgrid.columnconfigure(tt, 1, weight=1)
     + tkgrid.configure(s, sticky='ew')
     + }
     +
     +
     + ## For example, for generated data
     + x <- runif(500)*7
     + y <- sapply(x, function(x) {
     + if (0 <= x && x < 2) {
     + 5*x + rnorm(1,0,1)
     + } else if (2 <= x && x < 5) {
     + 8.6 + 2*x-.6*x^2 + rnorm(1,0,.5)
     + } else {
     + 8.5 - log(x) + rnorm(1,0,.8)
     + }
     + })
     +
     + p <- l_plot(x,y)
     + addRegressionLinesGUI(p)
     + })
     <Tcl>
    
    
     demo(l_glyph_sizes)
     ---- ~~~~~~~~~~~~~
    
     > require(RnavGraphImageData) || stop("Neeed RnavGraphImageData package")
     Loading required package: RnavGraphImageData
     [1] TRUE
    
     > if (loon:::.withTclImg) {
     + local({
     + # Plot glyphsizes for different glyphs
     + sizes <- c(0:10) # seq(15,25,by=5)
     + ns <- length(sizes)
     +
     + glyphs <- c('sizes', 'circle', 'square', 'triangle', 'diamond',
     + 'text', 'image', 'stars', 'parallel', 'polygon')
     + ng <- length(glyphs)
     +
     + ## ns+1 for labels
     + x <- rep(1:(ns+1), ng)
     + y <- rep(c(9, 8, 7.5, 7, 6.5, 6, 5, 3, 1,-1), each=ns+1)
     +
     + p <- l_plot(x,y, showLabels=FALSE)
     +
     +
     + for (i in seq_along(glyphs)) {
     + assign(paste0('i_',glyphs[i]), seq((i-1)*(ns+1)+1,i*(ns+1)))
     + }
     +
     +
     + ## Size Labels
     + labelsize <- 6
     + psizes <- rep(c(labelsize, sizes), ng)
     +
     + c_psizes <- as.character(psizes)
     + c_psizes[c_psizes=="0"] <- "<1"
     +
     + g_sizes <- l_glyph_add_text(p, text = c_psizes, label="size labels")
     +
     + p['glyph'] <- g_sizes
     + p['size'] <- psizes
     +
     + l_configure(p, color='black', size=labelsize, which=i_sizes)
     +
     + ## Primitive Glyphs
     + l_configure(p, glyph='circle', which=i_circle)
     + l_configure(p, glyph='square', which=i_square)
     + l_configure(p, glyph='triangle', which=i_triangle)
     + l_configure(p, glyph='diamond', which=i_diamond)
     +
     +
     + ## text glyph
     + g_text <- l_glyph_add_text(p, text = rep("aA", p['n']), label='text glyphs')
     + l_configure(p, glyph=g_text, which=i_text)
     +
     +
     + ## Images
     + data(faces)
     + faces.imgs <- l_image_import_array(faces, 64, 64, img_in_row = FALSE)
     + faces.imgs[1]
     + g_image <- l_glyph_add_image(p, image=rep(faces.imgs[1], p['n']), label='frey faces')
     + l_configure(p, glyph=g_image, which=i_image)
     +
     +
     + ## Stars
     + g_stars <- l_glyph_add_serialaxes(p, data=oliveAcids,
     + label='star glyphs', showArea=FALSE,
     + showAxes = TRUE, showEnclosing = TRUE)
     + l_configure(p, glyph=g_stars, which=i_stars)
     +
     + ## Parallel
     + g_parallel <- l_glyph_add_serialaxes(p, data=oliveAcids,
     + label='parallel coords', linewidth = 3, axesLayout = 'parallel',
     + showAxes = TRUE, showEnclosing = TRUE, showArea=FALSE)
     + l_configure(p, glyph=g_parallel, which=i_parallel)
     +
     +
     + # Polygons
     + # hand drawn
     + airplane_coords <- c(30.8,0.5,57.4,27.1,85.6,16.5,89.9,17,78.7,30.9,183.5,27.7,
     + 223.5,6.4,234.6,7.4,222.9,22.3,240,21.8,253.8,26.1,264.5,
     + 33.5,276.2,39.4,283.1,42,286.5,50.6,282,57.5,273.5,63.9,
     + 260.2,69.7,246.9,72.4,217.1,76.1,176.6,78.8,151.6,78.8,
     + 88.8,105.9,62.7,95.8,117,70.8,87.7,70.8,73.9,68.1,56.3,
     + 63.3,44.6,53.2,20.7,61.2,11.6,57.5,34,44.2)
     + x_ap <- airplane_coords[seq(1, length(airplane_coords), by=2)]
     + y_ap <- airplane_coords[seq(2, length(airplane_coords), by=2)]
     + ## center-scale
     + d_ap <- diff(range(x_ap, y_ap))/5 # 5 is min width or height of airplane if size <= 1
     + x_aps <- (x_ap-mean(x_ap))/d_ap
     + y_aps <- (y_ap-mean(y_ap))/d_ap
     +
     + g_polygon <- l_glyph_add_polygon(p, x=lapply(seq_len(p['n']), function(arg) x_aps),
     + y = lapply(seq_len(p['n']), function(arg) y_aps),
     + label='airplane')
     + l_configure(p, glyph=g_polygon, which=i_polygon)
     +
     +
     + ## Row Labels
     + vapply(glyphs, function(g) {
     + get(paste0('i_', g))[1]
     + }, numeric(1))## Row labeling
     +
     + g_row <- l_glyph_add_text(p, text=rep(glyphs, each= ns+1), label='glyph labels')
     +
     + i_rowlabels <- vapply(glyphs, function(g) {
     + get(paste0('i_', g))[1]
     + }, numeric(1))
     +
     + l_configure(p, glyph=g_row, color='black', which=i_rowlabels)
     +
     + })
     + } else {
     + cat("need the tkimg tcl extension installed to run this demo.\n")
     + }
     need the tkimg tcl extension installed to run this demo.
    
    
     demo(l_glyphs)
     ---- ~~~~~~~~
    
     > require(PairViz) || stop("Package PairViz is required.")
     Loading required package: PairViz
     Loading required package: TSP
     Loading required package: gtools
     Loading required package: graph
     Loading required package: BiocGenerics
     Loading required package: parallel
    
     Attaching package: 'BiocGenerics'
    
     The following objects are masked from 'package:parallel':
    
     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
     clusterExport, clusterMap, parApply, parCapply, parLapply,
     parLapplyLB, parRapply, parSapply, parSapplyLB
    
     The following objects are masked from 'package:stats':
    
     IQR, mad, sd, var, xtabs
    
     The following objects are masked from 'package:base':
    
     Filter, Find, Map, Position, Reduce, anyDuplicated, append,
     as.data.frame, basename, cbind, colMeans, colSums, colnames,
     dirname, do.call, duplicated, eval, evalq, get, grep, grepl,
     intersect, is.unsorted, lapply, lengths, mapply, match, mget,
     order, paste, pmax, pmax.int, pmin, pmin.int, rank, rbind,
     rowMeans, rowSums, rownames, sapply, setdiff, sort, table, tapply,
     union, unique, unsplit, which, which.max, which.min
    
    
     Attaching package: 'graph'
    
     The following object is masked from 'package:loon':
    
     complement
    
     [1] TRUE
    
     > local({
     + p <- with(olive, l_plot(oleic~arachidic, color=Area))
     +
     + ## Text
     + readline("press the return key to continue: next are text glyphs")
     +
     + gt <- l_glyph_add_text(p, text=as.character(olive$Area))
     + p['glyph'] <- gt
     +
     + ## Images
     +
     + if (loon:::.withTclImg) {
     +
     + readline("press the return key to continue: next are image glyphs")
     +
     + path <- file.path(find.package(package = "loon"), "images")
     + files <- list.files(path, full.names=TRUE)
     + imgs <- l_image_import_files(files)
     + names(imgs) <- gsub("\\.png$", "", basename(names(imgs)))
     + area <- gsub("^.*-", "", as.character(olive$Area))
     + areaimages <- imgs[match(area, names(imgs))]
     + gi <- l_glyph_add_image(p, images=areaimages)
     + p['glyph'] <- gi
     +
     +
     + readline("press the return key to continue: next reuse single image")
     +
     + l_configure(c(p,gi), images=areaimages[1])
     + ## or also just
     + ## l_configure(gi, images=areaimages[1])
     + }
     +
     +
     + ## Serialaxes
     + readline("press the return key to continue: next star glyphs")
     +
     + sa <- l_glyph_add_serialaxes(p, data=oliveAcids)
     + l_configure(p, glyph=sa)
     +
     + readline("press the return key to continue: next configure stars")
     +
     + l_configure(sa, showEnclosing=FALSE, linewidth=2)
     + l_configure(sa, showArea=FALSE)
     +
     + readline("press the return key to continue: next stack all Umbria glyphs")
     +
     + p['selected'] <- olive$Area == "Umbria"
     + l_move_valign(p,'selected')
     + l_move_halign(p,'selected')
     + l_configure(p, size=40, which='selected')
     + l_scaleto_selected(p)
     + l_configure(sa, showEnclosing=TRUE, bboxColor="steelblue", showArea=FALSE)
     + p['selected'] <- FALSE
     +
     + readline("press the return key to continue: next parallel coordinates")
     +
     + l_move_reset(p)
     + p['size'] <- 4
     + l_scaleto_world(p)
     + l_configure(sa, axesLayout="parallel")
     +
     + readline("press the return key to continue: next change the sequence")
     +
     + l_configure(sa, sequence=as.vector(t(hpaths(names(olive)[-c(1,2)]))))
     +
     + readline("press the return key to continue: next show axes")
     +
     + l_configure(sa, showAxes=TRUE)
     +
     + readline("press the return key to continue: switch back to star glyphs")
     +
     + l_configure(sa, axesLayout="radial", showAxes=FALSE, showEnclosing=FALSE)
     +
     +
     + ## Polygon Glyphs
     + readline("press the return key to continue: add polygon glyphs")
     +
     + x_star <-
     + c(-0.000864304235090734, 0.292999135695765, 0.949870354364736,
     + 0.474503025064823, 0.586862575626621, -0.000864304235090734,
     + -0.586430423509075, -0.474070872947277, -0.949438202247191, -0.29256698357822)
     + y_star <-
     + c(-1, -0.403630077787381, -0.308556611927398, 0.153846153846154,
     + 0.808556611927398, 0.499567847882455, 0.808556611927398, 0.153846153846154,
     + -0.308556611927398, -0.403630077787381)
     + x_cross <-
     + c(-0.258931143762604, -0.258931143762604, -0.950374531835206,
     + -0.950374531835206, -0.258931143762604, -0.258931143762604, 0.259651397291847,
     + 0.259651397291847, 0.948934024776722, 0.948934024776722, 0.259651397291847,
     + 0.259651397291847)
     + y_cross <-
     + c(-0.950374531835206, -0.258931143762604, -0.258931143762604,
     + 0.259651397291847, 0.259651397291847, 0.948934024776722, 0.948934024776722,
     + 0.259651397291847, 0.259651397291847, -0.258931143762604, -0.258931143762604,
     + -0.950374531835206)
     + x_hexagon <-
     + c(0.773552290406223, 0, -0.773552290406223, -0.773552290406223,
     + 0, 0.773552290406223)
     + y_hexagon <-
     + c(0.446917314894843, 0.894194756554307, 0.446917314894843, -0.447637568424085,
     + -0.892754249495822, -0.447637568424085)
     +
     +
     + x_polygon_glyph <- lapply(as.character(olive$Region), function(region) {
     + if (region == "North")
     + x_cross
     + else if (region == "South")
     + x_star
     + else
     + x_hexagon
     + })
     +
     + y_polygon_glyph <- lapply(as.character(olive$Region), function(region) {
     + if (region == "North")
     + y_cross
     + else if (region == "South")
     + y_star
     + else
     + y_hexagon
     + })
     +
     + gl_pol <- l_glyph_add_polygon(p, x=x_polygon_glyph, y=y_polygon_glyph, label="polygon")
     +
     + p['glyph'] <- gl_pol
     +
     + readline("press the return key to continue: don't fill polygon glyph area")
     +
     + gl_pol['showArea'] <- FALSE
     +
     + ## Mix glyphs
     + readline("press the return key to continue: mix between different glyphs")
     +
     + g <- sample(
     + c(
     + 'circle', 'square', 'triangle', 'diamond',
     + 'ocircle', 'osquare', 'otriangle', 'odiamond',
     + gt,
     + if (loon:::.withTclImg) gi else NULL,
     + sa, gl_pol
     + ),
     + dim(olive)[1], replace=TRUE
     + )
     + p['glyph'] <- g
     +
     + ## Pointrange Glyphs
     + readline("press the return key to continue: next pointrange glyphs")
     +
     + avg <- with(chickwts, tapply(weight, feed, mean))
     + sd <- with(chickwts, tapply(weight, feed, sd))
     +
     + min <- with(chickwts, tapply(weight, feed, min))
     + max <- with(chickwts, tapply(weight, feed, max))
     +
     + p1 <- l_plot(avg~sd)
     + g.p <- l_glyph_add_pointrange(p1, ymin=min, ymax=max)
     +
     + p1['glyph'] <- g.p
     +
     + })
     press the return key to continue: next are text glyphs
     press the return key to continue: next star glyphs
     press the return key to continue: next configure stars
     press the return key to continue: next stack all Umbria glyphs
     press the return key to continue: next parallel coordinates
     press the return key to continue: next change the sequence
     press the return key to continue: next show axes
     press the return key to continue: switch back to star glyphs
     press the return key to continue: add polygon glyphs
     press the return key to continue: don't fill polygon glyph area
     press the return key to continue: mix between different glyphs
     press the return key to continue: next pointrange glyphs
    
    
     demo(l_knn)
     ---- ~~~~~
    
     > local({
     +
     + highlight_knn <- function(p, data, k=5, method='euclidean') {
     +
     + if(!is(data, 'data.frame'))
     + data <- as.data.frame(data)
     +
     + ## Create Custom Control Panel
     + tt <- tktoplevel()
     +
     + onOff <- tclVar('1')
     + tkgrid(tkcheckbutton(tt, text='on/off', variable=onOff), sticky='w')
     +
     + k <- tclVar(k)
     + f1 <- tkframe(tt)
     +
     + e <- tkentry(f1, width=3, textvariable=k)
     + tkbind(e, '<Return>', function()hNN())
     + tkgrid(f1, sticky='w')
     + tkpack(tklabel(f1, text='k='), e, side='left')
     +
     + tkgrid(tklabel(tt, text='Nearest to:'), sticky='w')
     + distFrom <- tclVar('points')
     + f2 <- tkframe(tt)
     + tkgrid(f2, sticky='w')
     + tkpack(tkradiobutton(f2, text='points', variable=distFrom,
     + value='points', command=function()hNN()),
     + tkradiobutton(f2, text='mean', variable=distFrom,
     + value='mean', command=function()hNN()),
     + side='left')
     +
     + tkgrid(tklabel(tt, text='Space:'), sticky='w')
     + chbtns <- lapply(names(data), function(name) {
     + bvar <- tclVar('1')
     + b <- tkcheckbutton(tt, text=name, variable=bvar,
     + command=function()hNN())
     + tkgrid(b, sticky='w', padx=2)
     + return(bvar)
     + })
     +
     +
     + ## Create Nearest neighbour highlighting Functionality
     +
     + if(!is(p, 'loon'))
     + class(p) <- "loon"
     +
     + n <- nrow(data)
     + ## Which variables are used for D
     + cachedSpaceSelection <- rep(TRUE, ncol(data))
     + D <- as.matrix(dist(data, method = method))
     + I <- matrix(rep(1:n, n), ncol=n, byrow=TRUE)
     +
     + inds <- 1:n # used for subsetting
     +
     + ## Cache point gyph attributes that are used for highlighting
     + glyphCache <- character(0)
     + whichCache <- integer(0)
     + sizeCache <- integer(0)
     +
     + ## Function that highlights nearest neighbours
     + hNN <- function() {
     +
     + ## reset cached point glyphs attributes
     + if (length(whichCache) > 0) {
     + l_configure(p, glyph=glyphCache, size=sizeCache, which=whichCache)
     + whichCache <<- integer(0)
     + }
     +
     + if (tclvalue(onOff) == '0') return()
     +
     + isel <- which(p['selected'])
     + if (length(isel) == 0 || length(isel) == n) return()
     +
     + spaceSelection <- vapply(chbtns,
     + function(b)as.logical(as.numeric(tclvalue(b))),
     + logical(1))
     +
     + if(tclvalue(distFrom)=='points') {
     + if(!identical(cachedSpaceSelection, spaceSelection)) {
     + D <<- as.matrix(dist(data[, spaceSelection]))
     + cachedSpaceSelection <<- spaceSelection
     + }
     + chng_which <- unique(c(I[isel, -isel])[order(c(D[isel, -isel]))])
     + } else {
     + p_mean <- apply(data[isel, spaceSelection], 2, mean)
     + d <- apply(data[-isel, spaceSelection], 1,
     + function(row) dist(rbind(row, p_mean)))
     +
     + chng_which <- (inds[-isel])[order(d)]
     + }
     +
     + kval <- tclvalue(k)
     + if (grepl('[[:digit:]]+', kval)) {
     + kval <- as.numeric(kval)
     + } else {
     + kval <- 5
     + }
     +
     + ksel <- min(length(chng_which),kval)
     +
     + whichCache <<- chng_which[1:ksel]
     + glyphCache <<- p['glyph'][whichCache]
     + sizeCache <<- p['size'][whichCache]
     + l_configure(p, glyph='csquare', size=seq(25, 8, length.out = ksel), which=whichCache)
     + }
     +
     + l_bind_state(p, 'selected', hNN)
     + }
     +
     + ## For example,
     + sOiveAcids <- data.frame(scale(oliveAcids))
     + p <- with(sOiveAcids, l_plot(oleic~stearic, color=olive$Area))
     + highlight_knn(p, data=sOiveAcids, k=5)
     +
     + l_aspect(p) <- 1
     +
     + readline("press the return key to continue: next in a navigation graph setting")
     +
     + nav <- l_navgraph(oliveAcids, color=olive$Area)
     + highlight_knn(nav$plot, sOiveAcids)
     + l_aspect(nav$plot) <- 1
     +
     +
     + })
     press the return key to continue: next in a navigation graph setting
    
    
     demo(l_layers)
     ---- ~~~~~~~~
    
     > local({
     + p <- with(olive,
     + l_plot(x=linoleic, y=oleic,
     + color=Region, title="Olive Data"))
     +
     +
     + ## Layer a Group
     + l.g <- l_layer_group(p, label="Drawings", parent="root", index="end")
     +
     +
     + ## Layer Points
     + readline("press the return key to continue: next add points layer")
     +
     + l.pts <- l_layer_points(p,
     + x=c(200, 450, 1800),
     + y=c(6000, 8000, 7000),
     + color=c("green", "orange", "lightblue"),
     + parent=l.g)
     +
     + l_scaleto_layer(p, l.pts)
     +
     + readline("press the return key to continue: next scale to world")
     +
     + l_scaleto_world(p)
     +
     +
     + readline("press the return key to continue: next configure size and color")
     +
     + l_configure(l.pts, color="thistle", size=30)
     +
     + readline("press the return key to continue: next re-initialize points")
     +
     + l_configure(l.pts,
     + x=seq(from=200,to=1600, length.out=20),
     + y=seq(from=6000,to=8000, length.out=20),
     + color="steelblue", size=20:39)
     +
     +
     + readline("press the return key to continue: next re-label and move layer")
     +
     + l_layer_relabel(p, l.pts, "Different Sizes")
     + l_layer_move(p, l.pts, parent="root")
     +
     +
     + ## Polygon
     +
     + readline("press the return key to continue: next layer a polygon")
     +
     + i <- with(olive, chull(linoleic, oleic))
     +
     + x.hull <- olive$linoleic[i]
     + y.hull <- olive$oleic[i]
     +
     + l_layer_polygon(p, x.hull, y.hull, color="thistle",
     + linecolor="black", linewidth=4, parent=l.g)
     +
     +
     + ## Rectangle
     +
     + readline("press the return key to continue: next layer a rectangle")
     +
     + l_layer_rectangle(p, x=c(1100, 1300), y=c(7600, 8300), linewidth=2)
     +
     + ## Oval
     + readline("press the return key to continue: next layer an oval")
     +
     + l_layer_oval(p, x=c(1500, 1750), y=c(7900, 8100),
     + color="", linecolor="orange", linewidth=4)
     +
     + ## Line
     + readline("press the return key to continue: next layer a (regression) line and polygon")
     +
     + x <- with(olive, linoleic[Region=="North"])
     + y <- with(olive, oleic[Region=="North"])
     +
     + fit <- lm(y~x)
     + ##summary(fit)
     +
     + xr <- seq(from=min(x), to=max(x), length.out=20)
     + yp <- predict(fit, data.frame(x=xr), interval="prediction")
     +
     +
     + l.pi <- l_layer_polygon(p, x=c(xr, rev(xr)),
     + y=c(yp[,2],rev(yp[,3])),
     + color="lightgreen",
     + linecolor= "darkgreen", linewidth=2,
     + label="predition interval west liguria")
     +
     + l.fit <- l_layer_line(p, x=xr, y=yp[,1],
     + color="darkgreen", linewidth=8,
     + label="fit west liguria")
     +
     + l_layer_move(p, l.pi, "root", "end")
     + l_layer_raise(p, l.pi)
     +
     +
     + ## Text (size does not work and color is gray)
     +
     + readline("press the return key to continue: next layer text")
     +
     + bbox <- l_layer_bbox(p, "root")
     +
     + l_layer_texts(p, x=seq(from=bbox[1], to=bbox[3], length.out=length(LETTERS)),
     + y=rev(seq(from=bbox[2], to=bbox[4], length.out=length(LETTERS))),
     + text=LETTERS, size=seq_along(LETTERS),
     + angle=seq_along(LETTERS)/length(LETTERS)*360)
     +
     + })
     press the return key to continue: next add points layer
     press the return key to continue: next scale to world
     press the return key to continue: next configure size and color
     press the return key to continue: next re-initialize points
     press the return key to continue: next re-label and move layer
     press the return key to continue: next layer a polygon
     press the return key to continue: next layer a rectangle
     press the return key to continue: next layer an oval
     press the return key to continue: next layer a (regression) line and polygon
     press the return key to continue: next layer text
     loon layer "texts" of type texts of plot .l6.plot
     [1] "layer7"
    
    
     demo(l_layout)
     ---- ~~~~~~~~
    
     > local({
     + ## Tk geometry managers like grid and pack may be used
     + ## to place the widgets
     +
     + ## With pack stack three scatterplots that share the same x on top
     + ## and bind the zoomX and panX
     + tt <- tktoplevel()
     + tktitle(tt) <- "Using the pack geometry manager"
     +
     + attach(iris)
     + p1 <- l_plot(parent=tt, x=Sepal.Width, y=Petal.Width, color=Species,
     + linkingGroup="iris", showLabels=FALSE)
     + p2 <- l_plot(parent=tt, x=Sepal.Width, y=Petal.Length,
     + linkingGroup="iris", showLabels=FALSE)
     + p3 <- l_plot(parent=tt, x=Sepal.Width, y=Sepal.Length,
     + linkingGroup="iris", showLabels=FALSE)
     + s <- l_serialaxes(parent=tt, iris[,-5], linkingGroup="iris",
     + axesLayout="parallel")
     +
     + detach(iris)
     +
     + ## make the canvas resize to fairly small
     +
     + for (p in c(p1,p2,p3,s)) {
     + tkconfigure(paste(p,".canvas", sep=''), width=200, height=100)
     + }
     +
     + tkpack(p1, p2, p3, s, fill="both", expand=TRUE)
     +
     +
     + ## Bind so that they show the same x range
     + l_bind_state(p1, c("panX", "zoomX"), function(W)updateZoomPan(W))
     + l_bind_state(p2, c("panX", "zoomX"), function(W)updateZoomPan(W))
     + l_bind_state(p3, c("panX", "zoomX"), function(W)updateZoomPan(W))
     +
     + busy <- FALSE
     + updateZoomPan <- function(widget) {
     + if (!busy) {
     + busy <- TRUE
     + zoomX <- l_cget(widget, "zoomX")
     + panX <- l_cget(widget, "panX")
     +
     + for (w in c(p1, p2, p3)) {
     + l_configure(w, panX=panX, zoomX=zoomX, zoomY=zoomX)
     + }
     +
     + busy <- FALSE
     + }
     + }
     +
     +
     + readline("press the return key to continue: next scatterplot matrix with grid")
     +
     + tt2 <- tktoplevel()
     + tktitle(tt2) <- "Scatterplot Maxtrix Using Grid"
     +
     + nvar <- 7
     + pair <- combn(3:10, 2)
     +
     + ## create plots
     + plots <- apply(pair, 2, function(col) {
     + l_plot(parent=tt2, olive[,col[2]], olive[,col[1]], showLabels=FALSE)
     + })
     +
     + ## resize the min canvas size
     + sapply(plots, function(p) {
     + tkconfigure(paste(p,'.canvas',sep=''), width=50, height=50)
     + })
     +
     + ## grid layout
     + apply(rbind(plots, pair-2), 2, function(col) {
     + tkgrid(col[1], row=col[2], column=col[3], sticky="nesw")
     + })
     +
     + ## Column and Row wheight such that the cells expand
     + for (i in 1:(nvar+1)) {
     + tkgrid.columnconfigure(tt2, i, weight = 1)
     + tkgrid.rowconfigure(tt2, i, weight = 1)
     + }
     +
     + ## Add Variable Label
     + for (i in 3:10) {
     + lab <- tklabel(tt2, text=names(olive)[i])
     + tkgrid(lab, row = i - 2, column = i - 2)
     + }
     +
     + ## Link Plots and specify color
     + ## sync=push is cheaper
     + sapply(plots, function(p)l_configure(p, linkingGroup="olive", sync="push"))
     +
     + l_configure(plots[1], color=olive$Area)
     +
     +
     +
     + })
     press the return key to continue: next scatterplot matrix with grid
    
    
     demo(l_linkPrimitiveGlyphs)
     ---- ~~~~~~~~~~~~~~~~~~~~~
    
     > ## The suported point glyph primitives are: circle, square, triangle,
     > ## and rhombus. These glyphs are available for every scatterplot.
     > ##
     > ## So a call
     > ##
     > ## p['glyph'] <- "rhombus"
     > ##
     > ## will change every point glyph to a rhombus.
     > ##
     > ## Generally glyphs can not be linked among scatterplots, as nothing
     > ## guarantees that a particular (image, text, boxplot, etc...) glyph
     > ## is available for a scatterplot. However primitive shapes can be
     > ## linked, but it must be done manually as this demo shows.
     > ##
     > ## An simpler way, but less secure, is to set glyph to be a linked
     > ## state:
     > ##
     > ## states <- c(l_getLinkedStates(p1), 'glyph')
     > ## l_setLinkedStates(p1, states)
     > ## l_setLinkedStates(p2, states)
     >
     >
     > local({
     +
     + p1 <- with(iris,
     + l_plot(Sepal.Length, Petal.Width, color=Species,
     + linkingGroup="iris"))
     + p2 <- with(iris,
     + l_plot(Petal.Length, Sepal.Width, color=Species,
     + linkingGroup="iris"))
     +
     + l_bind_state(p1, "glyph", function(W)syncglyphs(W))
     + l_bind_state(p2, "glyph", function(W)syncglyphs(W))
     +
     +
     + tosync <- c(p1, p2)
     +
     + isbusy <- FALSE
     + syncglyphs <- function(widget) {
     + if (isbusy) {return()}
     +
     + glyph <- l_cget(widget, "glyph")
     + if (any(!(glyph %in% c("circle", "square",
     + "triangle", "diamond", "ocircle",
     + "osquare", "otriangle", "odiamond")))) {
     + stop(paste("Widget", widget,
     + "has a glyph that is not a primitive glyph shape."))
     + }
     +
     + isbusy <- TRUE
     + for(p in tosync) {
     + if (p != widget) {
     + l_configure(p, glyph=glyph)
     + }
     + }
     + isbusy <- FALSE
     + }
     +
     +
     + })
    
    
     demo(l_linking)
     ---- ~~~~~~~~~
    
     > local({
     +
     + p1 <- with(trees,
     + l_plot(Girth, Height, linkingGroup="trees"))
     +
     + p2 <- with(trees,
     + l_plot(Height, Volume, linkingGroup="trees"))
     +
     + p3 <- with(trees,
     + l_plot(Girth, Volume, color="red"))
     +
     + l_configure(p3, linkingGroup="trees", sync="push")
     +
     + readline("press the return key to continue: next disable linking of color for p3")
     +
     + l_getLinkedStates(p3)
     + l_setLinkedStates(p3, c("active", "size", "selected"))
     +
     + readline("press the return key to continue: next add serialaxes plot")
     +
     + s <- l_serialaxes(trees, linkingGroup="trees")
     +
     + readline("press the return key to continue: next demonstrate linkingKey")
     +
     + p4 <- l_plot(1:9,1:9, color="orange",
     + linkingKey=LETTERS[2:10], linkingGroup="letters")
     + g4.t <- l_glyph_add_text(p4, text=LETTERS[2:10])
     + l_configure(p4, glyph=g4.t, size=10)
     +
     +
     + p5 <- l_plot(1:4,1:4, color="green",
     + linkingKey=LETTERS[5:8], linkingGroup="letters")
     + g5.t <- l_glyph_add_text(p5, text=LETTERS[5:8])
     + l_configure(p5, glyph=g5.t, size=10)
     +
     + })
     press the return key to continue: next disable linking of color for p3
     press the return key to continue: next add serialaxes plot
     press the return key to continue: next demonstrate linkingKey
    
    
     demo(l_map)
     ---- ~~~~~
    
     > require(maps) || stop("package maps needed.")
     Loading required package: maps
     [1] TRUE
    
     > local({
     +
     + ## Maps from the map library
     + canada <- map("world", "Canada", fill=TRUE, plot=FALSE)
     + pmap <- l_plot()
     +
     + ## Color the lakes
     + id <- l_layer(pmap, canada,
     + color = ifelse(grepl("lake", canada$names,
     + ignore.case=TRUE), "lightblue", ""), asSingleLayer=FALSE)
     + l_scaleto_layer(pmap, id)
     +
     + ## Or manually
     + ##l_layer(pmap, target='layer69', color="lightblue") # Lake Winnipeg
     + ##l_layer(pmap, target='layer33', color="lightblue") # Great Slave Lake
     + ##l_layer(pmap, target='layer15', color="lightblue") # Great Bear Lake
     +
     + readline("press the return key to continue: next add points to scatterplot")
     +
     + data(world.cities)
     + canada.cities <- subset(world.cities,
     + grepl("canada", country.etc , ignore.case=TRUE))
     +
     + with(canada.cities,
     + l_configure(pmap, x=long, y=lat))
     + l_scaleto_world(pmap)
     +
     + readline("press the return key to continue: next add city name glyphs")
     +
     + g.t <- l_glyph_add_text(pmap, text=canada.cities$name)
     + pmap['glyph'] <- g.t
     +
     + })
     press the return key to continue: next add points to scatterplot
     press the return key to continue: next add city name glyphs
    
    
     demo(l_map_sp)
     ---- ~~~~~~~~
    
     > require(sp) || stop("package sp qequired")
     Loading required package: sp
     [1] TRUE
    
     > local({
     +
     + if (FALSE) {
     + con <- url("http://biogeo.ucdavis.edu/data/gadm2/R/CHE_adm0.RData")
     + load(con)
     + close(con)
     +
     + p <- l_plot()
     + g <- l_layer_group(p, label="Switzerland")
     + m <- l_layer(p, gadm, label="Switzerland", parent=g,
     + color="", linecolor="black")
     + l_scaleto_world(p)
     +
     + readline("press the return key to continue: map with multiple layers")
     +
     + l_layer_hide(p, g)
     +
     + g1 <- l_layer_group(p, label="Swiss Cantons")
     +
     + con <- url("http://biogeo.ucdavis.edu/data/gadm2/R/CHE_adm1.RData")
     + load(con)
     + close(con)
     +
     + m1 <- l_layer(p, gadm, label="Swiss Cantons", parent=g1,
     + color="", linecolor="red")
     +
     + # ## name the layers
     + cantons <- gadm@data$NAME_1[gadm@plotOrder]
     +
     + for (i in 1:length(m1)) {
     + sapply(m1[[i]], function(l)l_layer_relabel(p, l, cantons[i]))
     + }
     +
     + } else {
     + cat(paste0('loon demo l_map_sp should be evaluated by hand\nFind the demo file at: ',
     + system.file('demo','l_map_sp.R', package='loon'),'\n'))
     + }
     + ## l_aspect(p) <- 5/3
     +
     + })
     loon demo l_map_sp should be evaluated by hand
     Find the demo file at: /data/gannet/ripley/R/packages/tests-clang/loon.Rcheck/loon/demo/l_map_sp.R
    
    
     demo(l_ng_dimred)
     ---- ~~~~~~~~~~~
    
     > require(MASS) || stop("MASS library required")
     Loading required package: MASS
     [1] TRUE
    
     > require(kernlab) || stop("kernlab library required")
     Loading required package: kernlab
     [1] TRUE
    
     > require(RDRToolbox) || stop("RDRToolbox library required")
     Loading required package: RDRToolbox
     Error in eval(ei, envir) : RDRToolbox library required
     Calls: demo -> source -> withVisible -> eval -> eval
     In addition: Warning message:
     In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
     there is no package called 'RDRToolbox'
     Execution halted
Flavor: r-devel-linux-x86_64-fedora-clang

Version: 1.1.0
Check: tests
Result: ERROR
     Running ‘demos.R’ [21s/24s]
     Running ‘testthat.R’
    Running the tests in ‘tests/demos.R’ failed.
    Complete output:
     > ## as in the rgl package
     >
     > library(loon)
     Loading required package: tcltk
     >
     > # options(demo.ask=FALSE)
     >
     > is_windows <- Sys.info()['sysname'] == "Windows"
     >
     > for(demo in demo(package="loon")$results[,"Item"]) {
     + if (!(demo %in% c("loon", "lsystem"))) {
     + # on windows all the image resizing seem to use up too much memory
     + # when all the demos are run sequentially
     + if (!(is_windows && grepl("^l_ng_", demo))) {
     + demo(demo, package="loon", character.only=TRUE)
     + }
     + }
     + }
    
    
     demo(l_add_regressions)
     ---- ~~~~~~~~~~~~~~~~~
    
     > # Define a function addRegressionLines that takes a scatterplot
     > # handle as argument and creates a GUI to fit regression lines
     > # of a specific order to the selected points
     >
     > local({
     +
     + addRegressionLinesGUI <- function(p) {
     + force(p)
     + addRegressionLine <- function() {
     + sel <- p['selected']
     + if (sum(sel)==0) return()
     + xs <- p['x'][sel]; ys <- p['y'][sel]
     + fit <- lm(ys ~ poly(xs, as.numeric(tclvalue(degree))))
     + xrng <- seq(min(xs), max(xs), length.out = 20)
     + ypred <- predict(fit, newdata=data.frame(xs = xrng))
     + l_layer_line(p, x=xrng, y=ypred, color=as.character(color),
     + linewidth = 4, index=0, label=paste("degree", tclvalue(degree)))
     + l_configure(p, color=color, glyph='ocircle', which=sel)
     + }
     +
     + updateColor <- function() {
     + col <- as.character(tcl('tk_chooseColor', initialcolor=color))
     + if (col!='') {
     + tkconfigure(b_col, bg=col, activebackground=col)
     + color <<- col
     + }
     + }
     +
     + tt <- tktoplevel()
     + tktitle(tt) <- 'Add Regression Line'
     + degree <- tclVar('1')
     + color <- 'red'
     + s <- tkscale(tt, orient='horizontal', variable=degree,
     + from=1, to=8, resolution=1)
     + b_col <- tkbutton(tt, bg=color, activebackground=color, command=updateColor)
     + b_add <- tkbutton(tt, text='add', command=addRegressionLine)
     + tkgrid(tklabel(tt, text='degree:'), s, b_col, b_add, sticky='s', pady=5)
     + tkgrid.columnconfigure(tt, 1, weight=1)
     + tkgrid.configure(s, sticky='ew')
     + }
     +
     +
     + ## For example, for generated data
     + x <- runif(500)*7
     + y <- sapply(x, function(x) {
     + if (0 <= x && x < 2) {
     + 5*x + rnorm(1,0,1)
     + } else if (2 <= x && x < 5) {
     + 8.6 + 2*x-.6*x^2 + rnorm(1,0,.5)
     + } else {
     + 8.5 - log(x) + rnorm(1,0,.8)
     + }
     + })
     +
     + p <- l_plot(x,y)
     + addRegressionLinesGUI(p)
     + })
     <Tcl>
    
    
     demo(l_glyph_sizes)
     ---- ~~~~~~~~~~~~~
    
     > require(RnavGraphImageData) || stop("Neeed RnavGraphImageData package")
     Loading required package: RnavGraphImageData
     [1] TRUE
    
     > if (loon:::.withTclImg) {
     + local({
     + # Plot glyphsizes for different glyphs
     + sizes <- c(0:10) # seq(15,25,by=5)
     + ns <- length(sizes)
     +
     + glyphs <- c('sizes', 'circle', 'square', 'triangle', 'diamond',
     + 'text', 'image', 'stars', 'parallel', 'polygon')
     + ng <- length(glyphs)
     +
     + ## ns+1 for labels
     + x <- rep(1:(ns+1), ng)
     + y <- rep(c(9, 8, 7.5, 7, 6.5, 6, 5, 3, 1,-1), each=ns+1)
     +
     + p <- l_plot(x,y, showLabels=FALSE)
     +
     +
     + for (i in seq_along(glyphs)) {
     + assign(paste0('i_',glyphs[i]), seq((i-1)*(ns+1)+1,i*(ns+1)))
     + }
     +
     +
     + ## Size Labels
     + labelsize <- 6
     + psizes <- rep(c(labelsize, sizes), ng)
     +
     + c_psizes <- as.character(psizes)
     + c_psizes[c_psizes=="0"] <- "<1"
     +
     + g_sizes <- l_glyph_add_text(p, text = c_psizes, label="size labels")
     +
     + p['glyph'] <- g_sizes
     + p['size'] <- psizes
     +
     + l_configure(p, color='black', size=labelsize, which=i_sizes)
     +
     + ## Primitive Glyphs
     + l_configure(p, glyph='circle', which=i_circle)
     + l_configure(p, glyph='square', which=i_square)
     + l_configure(p, glyph='triangle', which=i_triangle)
     + l_configure(p, glyph='diamond', which=i_diamond)
     +
     +
     + ## text glyph
     + g_text <- l_glyph_add_text(p, text = rep("aA", p['n']), label='text glyphs')
     + l_configure(p, glyph=g_text, which=i_text)
     +
     +
     + ## Images
     + data(faces)
     + faces.imgs <- l_image_import_array(faces, 64, 64, img_in_row = FALSE)
     + faces.imgs[1]
     + g_image <- l_glyph_add_image(p, image=rep(faces.imgs[1], p['n']), label='frey faces')
     + l_configure(p, glyph=g_image, which=i_image)
     +
     +
     + ## Stars
     + g_stars <- l_glyph_add_serialaxes(p, data=oliveAcids,
     + label='star glyphs', showArea=FALSE,
     + showAxes = TRUE, showEnclosing = TRUE)
     + l_configure(p, glyph=g_stars, which=i_stars)
     +
     + ## Parallel
     + g_parallel <- l_glyph_add_serialaxes(p, data=oliveAcids,
     + label='parallel coords', linewidth = 3, axesLayout = 'parallel',
     + showAxes = TRUE, showEnclosing = TRUE, showArea=FALSE)
     + l_configure(p, glyph=g_parallel, which=i_parallel)
     +
     +
     + # Polygons
     + # hand drawn
     + airplane_coords <- c(30.8,0.5,57.4,27.1,85.6,16.5,89.9,17,78.7,30.9,183.5,27.7,
     + 223.5,6.4,234.6,7.4,222.9,22.3,240,21.8,253.8,26.1,264.5,
     + 33.5,276.2,39.4,283.1,42,286.5,50.6,282,57.5,273.5,63.9,
     + 260.2,69.7,246.9,72.4,217.1,76.1,176.6,78.8,151.6,78.8,
     + 88.8,105.9,62.7,95.8,117,70.8,87.7,70.8,73.9,68.1,56.3,
     + 63.3,44.6,53.2,20.7,61.2,11.6,57.5,34,44.2)
     + x_ap <- airplane_coords[seq(1, length(airplane_coords), by=2)]
     + y_ap <- airplane_coords[seq(2, length(airplane_coords), by=2)]
     + ## center-scale
     + d_ap <- diff(range(x_ap, y_ap))/5 # 5 is min width or height of airplane if size <= 1
     + x_aps <- (x_ap-mean(x_ap))/d_ap
     + y_aps <- (y_ap-mean(y_ap))/d_ap
     +
     + g_polygon <- l_glyph_add_polygon(p, x=lapply(seq_len(p['n']), function(arg) x_aps),
     + y = lapply(seq_len(p['n']), function(arg) y_aps),
     + label='airplane')
     + l_configure(p, glyph=g_polygon, which=i_polygon)
     +
     +
     + ## Row Labels
     + vapply(glyphs, function(g) {
     + get(paste0('i_', g))[1]
     + }, numeric(1))## Row labeling
     +
     + g_row <- l_glyph_add_text(p, text=rep(glyphs, each= ns+1), label='glyph labels')
     +
     + i_rowlabels <- vapply(glyphs, function(g) {
     + get(paste0('i_', g))[1]
     + }, numeric(1))
     +
     + l_configure(p, glyph=g_row, color='black', which=i_rowlabels)
     +
     + })
     + } else {
     + cat("need the tkimg tcl extension installed to run this demo.\n")
     + }
     need the tkimg tcl extension installed to run this demo.
    
    
     demo(l_glyphs)
     ---- ~~~~~~~~
    
     > require(PairViz) || stop("Package PairViz is required.")
     Loading required package: PairViz
     Loading required package: TSP
     Loading required package: gtools
     Loading required package: graph
     Loading required package: BiocGenerics
     Loading required package: parallel
    
     Attaching package: 'BiocGenerics'
    
     The following objects are masked from 'package:parallel':
    
     clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
     clusterExport, clusterMap, parApply, parCapply, parLapply,
     parLapplyLB, parRapply, parSapply, parSapplyLB
    
     The following objects are masked from 'package:stats':
    
     IQR, mad, sd, var, xtabs
    
     The following objects are masked from 'package:base':
    
     Filter, Find, Map, Position, Reduce, anyDuplicated, append,
     as.data.frame, basename, cbind, colMeans, colSums, colnames,
     dirname, do.call, duplicated, eval, evalq, get, grep, grepl,
     intersect, is.unsorted, lapply, lengths, mapply, match, mget,
     order, paste, pmax, pmax.int, pmin, pmin.int, rank, rbind,
     rowMeans, rowSums, rownames, sapply, setdiff, sort, table, tapply,
     union, unique, unsplit, which, which.max, which.min
    
    
     Attaching package: 'graph'
    
     The following object is masked from 'package:loon':
    
     complement
    
     [1] TRUE
    
     > local({
     + p <- with(olive, l_plot(oleic~arachidic, color=Area))
     +
     + ## Text
     + readline("press the return key to continue: next are text glyphs")
     +
     + gt <- l_glyph_add_text(p, text=as.character(olive$Area))
     + p['glyph'] <- gt
     +
     + ## Images
     +
     + if (loon:::.withTclImg) {
     +
     + readline("press the return key to continue: next are image glyphs")
     +
     + path <- file.path(find.package(package = "loon"), "images")
     + files <- list.files(path, full.names=TRUE)
     + imgs <- l_image_import_files(files)
     + names(imgs) <- gsub("\\.png$", "", basename(names(imgs)))
     + area <- gsub("^.*-", "", as.character(olive$Area))
     + areaimages <- imgs[match(area, names(imgs))]
     + gi <- l_glyph_add_image(p, images=areaimages)
     + p['glyph'] <- gi
     +
     +
     + readline("press the return key to continue: next reuse single image")
     +
     + l_configure(c(p,gi), images=areaimages[1])
     + ## or also just
     + ## l_configure(gi, images=areaimages[1])
     + }
     +
     +
     + ## Serialaxes
     + readline("press the return key to continue: next star glyphs")
     +
     + sa <- l_glyph_add_serialaxes(p, data=oliveAcids)
     + l_configure(p, glyph=sa)
     +
     + readline("press the return key to continue: next configure stars")
     +
     + l_configure(sa, showEnclosing=FALSE, linewidth=2)
     + l_configure(sa, showArea=FALSE)
     +
     + readline("press the return key to continue: next stack all Umbria glyphs")
     +
     + p['selected'] <- olive$Area == "Umbria"
     + l_move_valign(p,'selected')
     + l_move_halign(p,'selected')
     + l_configure(p, size=40, which='selected')
     + l_scaleto_selected(p)
     + l_configure(sa, showEnclosing=TRUE, bboxColor="steelblue", showArea=FALSE)
     + p['selected'] <- FALSE
     +
     + readline("press the return key to continue: next parallel coordinates")
     +
     + l_move_reset(p)
     + p['size'] <- 4
     + l_scaleto_world(p)
     + l_configure(sa, axesLayout="parallel")
     +
     + readline("press the return key to continue: next change the sequence")
     +
     + l_configure(sa, sequence=as.vector(t(hpaths(names(olive)[-c(1,2)]))))
     +
     + readline("press the return key to continue: next show axes")
     +
     + l_configure(sa, showAxes=TRUE)
     +
     + readline("press the return key to continue: switch back to star glyphs")
     +
     + l_configure(sa, axesLayout="radial", showAxes=FALSE, showEnclosing=FALSE)
     +
     +
     + ## Polygon Glyphs
     + readline("press the return key to continue: add polygon glyphs")
     +
     + x_star <-
     + c(-0.000864304235090734, 0.292999135695765, 0.949870354364736,
     + 0.474503025064823, 0.586862575626621, -0.000864304235090734,
     + -0.586430423509075, -0.474070872947277, -0.949438202247191, -0.29256698357822)
     + y_star <-
     + c(-1, -0.403630077787381, -0.308556611927398, 0.153846153846154,
     + 0.808556611927398, 0.499567847882455, 0.808556611927398, 0.153846153846154,
     + -0.308556611927398, -0.403630077787381)
     + x_cross <-
     + c(-0.258931143762604, -0.258931143762604, -0.950374531835206,
     + -0.950374531835206, -0.258931143762604, -0.258931143762604, 0.259651397291847,
     + 0.259651397291847, 0.948934024776722, 0.948934024776722, 0.259651397291847,
     + 0.259651397291847)
     + y_cross <-
     + c(-0.950374531835206, -0.258931143762604, -0.258931143762604,
     + 0.259651397291847, 0.259651397291847, 0.948934024776722, 0.948934024776722,
     + 0.259651397291847, 0.259651397291847, -0.258931143762604, -0.258931143762604,
     + -0.950374531835206)
     + x_hexagon <-
     + c(0.773552290406223, 0, -0.773552290406223, -0.773552290406223,
     + 0, 0.773552290406223)
     + y_hexagon <-
     + c(0.446917314894843, 0.894194756554307, 0.446917314894843, -0.447637568424085,
     + -0.892754249495822, -0.447637568424085)
     +
     +
     + x_polygon_glyph <- lapply(as.character(olive$Region), function(region) {
     + if (region == "North")
     + x_cross
     + else if (region == "South")
     + x_star
     + else
     + x_hexagon
     + })
     +
     + y_polygon_glyph <- lapply(as.character(olive$Region), function(region) {
     + if (region == "North")
     + y_cross
     + else if (region == "South")
     + y_star
     + else
     + y_hexagon
     + })
     +
     + gl_pol <- l_glyph_add_polygon(p, x=x_polygon_glyph, y=y_polygon_glyph, label="polygon")
     +
     + p['glyph'] <- gl_pol
     +
     + readline("press the return key to continue: don't fill polygon glyph area")
     +
     + gl_pol['showArea'] <- FALSE
     +
     + ## Mix glyphs
     + readline("press the return key to continue: mix between different glyphs")
     +
     + g <- sample(
     + c(
     + 'circle', 'square', 'triangle', 'diamond',
     + 'ocircle', 'osquare', 'otriangle', 'odiamond',
     + gt,
     + if (loon:::.withTclImg) gi else NULL,
     + sa, gl_pol
     + ),
     + dim(olive)[1], replace=TRUE
     + )
     + p['glyph'] <- g
     +
     + ## Pointrange Glyphs
     + readline("press the return key to continue: next pointrange glyphs")
     +
     + avg <- with(chickwts, tapply(weight, feed, mean))
     + sd <- with(chickwts, tapply(weight, feed, sd))
     +
     + min <- with(chickwts, tapply(weight, feed, min))
     + max <- with(chickwts, tapply(weight, feed, max))
     +
     + p1 <- l_plot(avg~sd)
     + g.p <- l_glyph_add_pointrange(p1, ymin=min, ymax=max)
     +
     + p1['glyph'] <- g.p
     +
     + })
     press the return key to continue: next are text glyphs
     press the return key to continue: next star glyphs
     press the return key to continue: next configure stars
     press the return key to continue: next stack all Umbria glyphs
     press the return key to continue: next parallel coordinates
     press the return key to continue: next change the sequence
     press the return key to continue: next show axes
     press the return key to continue: switch back to star glyphs
     press the return key to continue: add polygon glyphs
     press the return key to continue: don't fill polygon glyph area
     press the return key to continue: mix between different glyphs
     press the return key to continue: next pointrange glyphs
    
    
     demo(l_knn)
     ---- ~~~~~
    
     > local({
     +
     + highlight_knn <- function(p, data, k=5, method='euclidean') {
     +
     + if(!is(data, 'data.frame'))
     + data <- as.data.frame(data)
     +
     + ## Create Custom Control Panel
     + tt <- tktoplevel()
     +
     + onOff <- tclVar('1')
     + tkgrid(tkcheckbutton(tt, text='on/off', variable=onOff), sticky='w')
     +
     + k <- tclVar(k)
     + f1 <- tkframe(tt)
     +
     + e <- tkentry(f1, width=3, textvariable=k)
     + tkbind(e, '<Return>', function()hNN())
     + tkgrid(f1, sticky='w')
     + tkpack(tklabel(f1, text='k='), e, side='left')
     +
     + tkgrid(tklabel(tt, text='Nearest to:'), sticky='w')
     + distFrom <- tclVar('points')
     + f2 <- tkframe(tt)
     + tkgrid(f2, sticky='w')
     + tkpack(tkradiobutton(f2, text='points', variable=distFrom,
     + value='points', command=function()hNN()),
     + tkradiobutton(f2, text='mean', variable=distFrom,
     + value='mean', command=function()hNN()),
     + side='left')
     +
     + tkgrid(tklabel(tt, text='Space:'), sticky='w')
     + chbtns <- lapply(names(data), function(name) {
     + bvar <- tclVar('1')
     + b <- tkcheckbutton(tt, text=name, variable=bvar,
     + command=function()hNN())
     + tkgrid(b, sticky='w', padx=2)
     + return(bvar)
     + })
     +
     +
     + ## Create Nearest neighbour highlighting Functionality
     +
     + if(!is(p, 'loon'))
     + class(p) <- "loon"
     +
     + n <- nrow(data)
     + ## Which variables are used for D
     + cachedSpaceSelection <- rep(TRUE, ncol(data))
     + D <- as.matrix(dist(data, method = method))
     + I <- matrix(rep(1:n, n), ncol=n, byrow=TRUE)
     +
     + inds <- 1:n # used for subsetting
     +
     + ## Cache point gyph attributes that are used for highlighting
     + glyphCache <- character(0)
     + whichCache <- integer(0)
     + sizeCache <- integer(0)
     +
     + ## Function that highlights nearest neighbours
     + hNN <- function() {
     +
     + ## reset cached point glyphs attributes
     + if (length(whichCache) > 0) {
     + l_configure(p, glyph=glyphCache, size=sizeCache, which=whichCache)
     + whichCache <<- integer(0)
     + }
     +
     + if (tclvalue(onOff) == '0') return()
     +
     + isel <- which(p['selected'])
     + if (length(isel) == 0 || length(isel) == n) return()
     +
     + spaceSelection <- vapply(chbtns,
     + function(b)as.logical(as.numeric(tclvalue(b))),
     + logical(1))
     +
     + if(tclvalue(distFrom)=='points') {
     + if(!identical(cachedSpaceSelection, spaceSelection)) {
     + D <<- as.matrix(dist(data[, spaceSelection]))
     + cachedSpaceSelection <<- spaceSelection
     + }
     + chng_which <- unique(c(I[isel, -isel])[order(c(D[isel, -isel]))])
     + } else {
     + p_mean <- apply(data[isel, spaceSelection], 2, mean)
     + d <- apply(data[-isel, spaceSelection], 1,
     + function(row) dist(rbind(row, p_mean)))
     +
     + chng_which <- (inds[-isel])[order(d)]
     + }
     +
     + kval <- tclvalue(k)
     + if (grepl('[[:digit:]]+', kval)) {
     + kval <- as.numeric(kval)
     + } else {
     + kval <- 5
     + }
     +
     + ksel <- min(length(chng_which),kval)
     +
     + whichCache <<- chng_which[1:ksel]
     + glyphCache <<- p['glyph'][whichCache]
     + sizeCache <<- p['size'][whichCache]
     + l_configure(p, glyph='csquare', size=seq(25, 8, length.out = ksel), which=whichCache)
     + }
     +
     + l_bind_state(p, 'selected', hNN)
     + }
     +
     + ## For example,
     + sOiveAcids <- data.frame(scale(oliveAcids))
     + p <- with(sOiveAcids, l_plot(oleic~stearic, color=olive$Area))
     + highlight_knn(p, data=sOiveAcids, k=5)
     +
     + l_aspect(p) <- 1
     +
     + readline("press the return key to continue: next in a navigation graph setting")
     +
     + nav <- l_navgraph(oliveAcids, color=olive$Area)
     + highlight_knn(nav$plot, sOiveAcids)
     + l_aspect(nav$plot) <- 1
     +
     +
     + })
     press the return key to continue: next in a navigation graph setting
    
    
     demo(l_layers)
     ---- ~~~~~~~~
    
     > local({
     + p <- with(olive,
     + l_plot(x=linoleic, y=oleic,
     + color=Region, title="Olive Data"))
     +
     +
     + ## Layer a Group
     + l.g <- l_layer_group(p, label="Drawings", parent="root", index="end")
     +
     +
     + ## Layer Points
     + readline("press the return key to continue: next add points layer")
     +
     + l.pts <- l_layer_points(p,
     + x=c(200, 450, 1800),
     + y=c(6000, 8000, 7000),
     + color=c("green", "orange", "lightblue"),
     + parent=l.g)
     +
     + l_scaleto_layer(p, l.pts)
     +
     + readline("press the return key to continue: next scale to world")
     +
     + l_scaleto_world(p)
     +
     +
     + readline("press the return key to continue: next configure size and color")
     +
     + l_configure(l.pts, color="thistle", size=30)
     +
     + readline("press the return key to continue: next re-initialize points")
     +
     + l_configure(l.pts,
     + x=seq(from=200,to=1600, length.out=20),
     + y=seq(from=6000,to=8000, length.out=20),
     + color="steelblue", size=20:39)
     +
     +
     + readline("press the return key to continue: next re-label and move layer")
     +
     + l_layer_relabel(p, l.pts, "Different Sizes")
     + l_layer_move(p, l.pts, parent="root")
     +
     +
     + ## Polygon
     +
     + readline("press the return key to continue: next layer a polygon")
     +
     + i <- with(olive, chull(linoleic, oleic))
     +
     + x.hull <- olive$linoleic[i]
     + y.hull <- olive$oleic[i]
     +
     + l_layer_polygon(p, x.hull, y.hull, color="thistle",
     + linecolor="black", linewidth=4, parent=l.g)
     +
     +
     + ## Rectangle
     +
     + readline("press the return key to continue: next layer a rectangle")
     +
     + l_layer_rectangle(p, x=c(1100, 1300), y=c(7600, 8300), linewidth=2)
     +
     + ## Oval
     + readline("press the return key to continue: next layer an oval")
     +
     + l_layer_oval(p, x=c(1500, 1750), y=c(7900, 8100),
     + color="", linecolor="orange", linewidth=4)
     +
     + ## Line
     + readline("press the return key to continue: next layer a (regression) line and polygon")
     +
     + x <- with(olive, linoleic[Region=="North"])
     + y <- with(olive, oleic[Region=="North"])
     +
     + fit <- lm(y~x)
     + ##summary(fit)
     +
     + xr <- seq(from=min(x), to=max(x), length.out=20)
     + yp <- predict(fit, data.frame(x=xr), interval="prediction")
     +
     +
     + l.pi <- l_layer_polygon(p, x=c(xr, rev(xr)),
     + y=c(yp[,2],rev(yp[,3])),
     + color="lightgreen",
     + linecolor= "darkgreen", linewidth=2,
     + label="predition interval west liguria")
     +
     + l.fit <- l_layer_line(p, x=xr, y=yp[,1],
     + color="darkgreen", linewidth=8,
     + label="fit west liguria")
     +
     + l_layer_move(p, l.pi, "root", "end")
     + l_layer_raise(p, l.pi)
     +
     +
     + ## Text (size does not work and color is gray)
     +
     + readline("press the return key to continue: next layer text")
     +
     + bbox <- l_layer_bbox(p, "root")
     +
     + l_layer_texts(p, x=seq(from=bbox[1], to=bbox[3], length.out=length(LETTERS)),
     + y=rev(seq(from=bbox[2], to=bbox[4], length.out=length(LETTERS))),
     + text=LETTERS, size=seq_along(LETTERS),
     + angle=seq_along(LETTERS)/length(LETTERS)*360)
     +
     + })
     press the return key to continue: next add points layer
     press the return key to continue: next scale to world
     press the return key to continue: next configure size and color
     press the return key to continue: next re-initialize points
     press the return key to continue: next re-label and move layer
     press the return key to continue: next layer a polygon
     press the return key to continue: next layer a rectangle
     press the return key to continue: next layer an oval
     press the return key to continue: next layer a (regression) line and polygon
     press the return key to continue: next layer text
     loon layer "texts" of type texts of plot .l6.plot
     [1] "layer7"
    
    
     demo(l_layout)
     ---- ~~~~~~~~
    
     > local({
     + ## Tk geometry managers like grid and pack may be used
     + ## to place the widgets
     +
     + ## With pack stack three scatterplots that share the same x on top
     + ## and bind the zoomX and panX
     + tt <- tktoplevel()
     + tktitle(tt) <- "Using the pack geometry manager"
     +
     + attach(iris)
     + p1 <- l_plot(parent=tt, x=Sepal.Width, y=Petal.Width, color=Species,
     + linkingGroup="iris", showLabels=FALSE)
     + p2 <- l_plot(parent=tt, x=Sepal.Width, y=Petal.Length,
     + linkingGroup="iris", showLabels=FALSE)
     + p3 <- l_plot(parent=tt, x=Sepal.Width, y=Sepal.Length,
     + linkingGroup="iris", showLabels=FALSE)
     + s <- l_serialaxes(parent=tt, iris[,-5], linkingGroup="iris",
     + axesLayout="parallel")
     +
     + detach(iris)
     +
     + ## make the canvas resize to fairly small
     +
     + for (p in c(p1,p2,p3,s)) {
     + tkconfigure(paste(p,".canvas", sep=''), width=200, height=100)
     + }
     +
     + tkpack(p1, p2, p3, s, fill="both", expand=TRUE)
     +
     +
     + ## Bind so that they show the same x range
     + l_bind_state(p1, c("panX", "zoomX"), function(W)updateZoomPan(W))
     + l_bind_state(p2, c("panX", "zoomX"), function(W)updateZoomPan(W))
     + l_bind_state(p3, c("panX", "zoomX"), function(W)updateZoomPan(W))
     +
     + busy <- FALSE
     + updateZoomPan <- function(widget) {
     + if (!busy) {
     + busy <- TRUE
     + zoomX <- l_cget(widget, "zoomX")
     + panX <- l_cget(widget, "panX")
     +
     + for (w in c(p1, p2, p3)) {
     + l_configure(w, panX=panX, zoomX=zoomX, zoomY=zoomX)
     + }
     +
     + busy <- FALSE
     + }
     + }
     +
     +
     + readline("press the return key to continue: next scatterplot matrix with grid")
     +
     + tt2 <- tktoplevel()
     + tktitle(tt2) <- "Scatterplot Maxtrix Using Grid"
     +
     + nvar <- 7
     + pair <- combn(3:10, 2)
     +
     + ## create plots
     + plots <- apply(pair, 2, function(col) {
     + l_plot(parent=tt2, olive[,col[2]], olive[,col[1]], showLabels=FALSE)
     + })
     +
     + ## resize the min canvas size
     + sapply(plots, function(p) {
     + tkconfigure(paste(p,'.canvas',sep=''), width=50, height=50)
     + })
     +
     + ## grid layout
     + apply(rbind(plots, pair-2), 2, function(col) {
     + tkgrid(col[1], row=col[2], column=col[3], sticky="nesw")
     + })
     +
     + ## Column and Row wheight such that the cells expand
     + for (i in 1:(nvar+1)) {
     + tkgrid.columnconfigure(tt2, i, weight = 1)
     + tkgrid.rowconfigure(tt2, i, weight = 1)
     + }
     +
     + ## Add Variable Label
     + for (i in 3:10) {
     + lab <- tklabel(tt2, text=names(olive)[i])
     + tkgrid(lab, row = i - 2, column = i - 2)
     + }
     +
     + ## Link Plots and specify color
     + ## sync=push is cheaper
     + sapply(plots, function(p)l_configure(p, linkingGroup="olive", sync="push"))
     +
     + l_configure(plots[1], color=olive$Area)
     +
     +
     +
     + })
     press the return key to continue: next scatterplot matrix with grid
    
    
     demo(l_linkPrimitiveGlyphs)
     ---- ~~~~~~~~~~~~~~~~~~~~~
    
     > ## The suported point glyph primitives are: circle, square, triangle,
     > ## and rhombus. These glyphs are available for every scatterplot.
     > ##
     > ## So a call
     > ##
     > ## p['glyph'] <- "rhombus"
     > ##
     > ## will change every point glyph to a rhombus.
     > ##
     > ## Generally glyphs can not be linked among scatterplots, as nothing
     > ## guarantees that a particular (image, text, boxplot, etc...) glyph
     > ## is available for a scatterplot. However primitive shapes can be
     > ## linked, but it must be done manually as this demo shows.
     > ##
     > ## An simpler way, but less secure, is to set glyph to be a linked
     > ## state:
     > ##
     > ## states <- c(l_getLinkedStates(p1), 'glyph')
     > ## l_setLinkedStates(p1, states)
     > ## l_setLinkedStates(p2, states)
     >
     >
     > local({
     +
     + p1 <- with(iris,
     + l_plot(Sepal.Length, Petal.Width, color=Species,
     + linkingGroup="iris"))
     + p2 <- with(iris,
     + l_plot(Petal.Length, Sepal.Width, color=Species,
     + linkingGroup="iris"))
     +
     + l_bind_state(p1, "glyph", function(W)syncglyphs(W))
     + l_bind_state(p2, "glyph", function(W)syncglyphs(W))
     +
     +
     + tosync <- c(p1, p2)
     +
     + isbusy <- FALSE
     + syncglyphs <- function(widget) {
     + if (isbusy) {return()}
     +
     + glyph <- l_cget(widget, "glyph")
     + if (any(!(glyph %in% c("circle", "square",
     + "triangle", "diamond", "ocircle",
     + "osquare", "otriangle", "odiamond")))) {
     + stop(paste("Widget", widget,
     + "has a glyph that is not a primitive glyph shape."))
     + }
     +
     + isbusy <- TRUE
     + for(p in tosync) {
     + if (p != widget) {
     + l_configure(p, glyph=glyph)
     + }
     + }
     + isbusy <- FALSE
     + }
     +
     +
     + })
    
    
     demo(l_linking)
     ---- ~~~~~~~~~
    
     > local({
     +
     + p1 <- with(trees,
     + l_plot(Girth, Height, linkingGroup="trees"))
     +
     + p2 <- with(trees,
     + l_plot(Height, Volume, linkingGroup="trees"))
     +
     + p3 <- with(trees,
     + l_plot(Girth, Volume, color="red"))
     +
     + l_configure(p3, linkingGroup="trees", sync="push")
     +
     + readline("press the return key to continue: next disable linking of color for p3")
     +
     + l_getLinkedStates(p3)
     + l_setLinkedStates(p3, c("active", "size", "selected"))
     +
     + readline("press the return key to continue: next add serialaxes plot")
     +
     + s <- l_serialaxes(trees, linkingGroup="trees")
     +
     + readline("press the return key to continue: next demonstrate linkingKey")
     +
     + p4 <- l_plot(1:9,1:9, color="orange",
     + linkingKey=LETTERS[2:10], linkingGroup="letters")
     + g4.t <- l_glyph_add_text(p4, text=LETTERS[2:10])
     + l_configure(p4, glyph=g4.t, size=10)
     +
     +
     + p5 <- l_plot(1:4,1:4, color="green",
     + linkingKey=LETTERS[5:8], linkingGroup="letters")
     + g5.t <- l_glyph_add_text(p5, text=LETTERS[5:8])
     + l_configure(p5, glyph=g5.t, size=10)
     +
     + })
     press the return key to continue: next disable linking of color for p3
     press the return key to continue: next add serialaxes plot
     press the return key to continue: next demonstrate linkingKey
    
    
     demo(l_map)
     ---- ~~~~~
    
     > require(maps) || stop("package maps needed.")
     Loading required package: maps
     [1] TRUE
    
     > local({
     +
     + ## Maps from the map library
     + canada <- map("world", "Canada", fill=TRUE, plot=FALSE)
     + pmap <- l_plot()
     +
     + ## Color the lakes
     + id <- l_layer(pmap, canada,
     + color = ifelse(grepl("lake", canada$names,
     + ignore.case=TRUE), "lightblue", ""), asSingleLayer=FALSE)
     + l_scaleto_layer(pmap, id)
     +
     + ## Or manually
     + ##l_layer(pmap, target='layer69', color="lightblue") # Lake Winnipeg
     + ##l_layer(pmap, target='layer33', color="lightblue") # Great Slave Lake
     + ##l_layer(pmap, target='layer15', color="lightblue") # Great Bear Lake
     +
     + readline("press the return key to continue: next add points to scatterplot")
     +
     + data(world.cities)
     + canada.cities <- subset(world.cities,
     + grepl("canada", country.etc , ignore.case=TRUE))
     +
     + with(canada.cities,
     + l_configure(pmap, x=long, y=lat))
     + l_scaleto_world(pmap)
     +
     + readline("press the return key to continue: next add city name glyphs")
     +
     + g.t <- l_glyph_add_text(pmap, text=canada.cities$name)
     + pmap['glyph'] <- g.t
     +
     + })
     press the return key to continue: next add points to scatterplot
     press the return key to continue: next add city name glyphs
    
    
     demo(l_map_sp)
     ---- ~~~~~~~~
    
     > require(sp) || stop("package sp qequired")
     Loading required package: sp
     [1] TRUE
    
     > local({
     +
     + if (FALSE) {
     + con <- url("http://biogeo.ucdavis.edu/data/gadm2/R/CHE_adm0.RData")
     + load(con)
     + close(con)
     +
     + p <- l_plot()
     + g <- l_layer_group(p, label="Switzerland")
     + m <- l_layer(p, gadm, label="Switzerland", parent=g,
     + color="", linecolor="black")
     + l_scaleto_world(p)
     +
     + readline("press the return key to continue: map with multiple layers")
     +
     + l_layer_hide(p, g)
     +
     + g1 <- l_layer_group(p, label="Swiss Cantons")
     +
     + con <- url("http://biogeo.ucdavis.edu/data/gadm2/R/CHE_adm1.RData")
     + load(con)
     + close(con)
     +
     + m1 <- l_layer(p, gadm, label="Swiss Cantons", parent=g1,
     + color="", linecolor="red")
     +
     + # ## name the layers
     + cantons <- gadm@data$NAME_1[gadm@plotOrder]
     +
     + for (i in 1:length(m1)) {
     + sapply(m1[[i]], function(l)l_layer_relabel(p, l, cantons[i]))
     + }
     +
     + } else {
     + cat(paste0('loon demo l_map_sp should be evaluated by hand\nFind the demo file at: ',
     + system.file('demo','l_map_sp.R', package='loon'),'\n'))
     + }
     + ## l_aspect(p) <- 5/3
     +
     + })
     loon demo l_map_sp should be evaluated by hand
     Find the demo file at: /data/gannet/ripley/R/packages/tests-devel/loon.Rcheck/loon/demo/l_map_sp.R
    
    
     demo(l_ng_dimred)
     ---- ~~~~~~~~~~~
    
     > require(MASS) || stop("MASS library required")
     Loading required package: MASS
     [1] TRUE
    
     > require(kernlab) || stop("kernlab library required")
     Loading required package: kernlab
     [1] TRUE
    
     > require(RDRToolbox) || stop("RDRToolbox library required")
     Loading required package: RDRToolbox
     Error in eval(ei, envir) : RDRToolbox library required
     Calls: demo -> source -> withVisible -> eval -> eval
     In addition: Warning message:
     In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
     there is no package called 'RDRToolbox'
     Execution halted
Flavor: r-devel-linux-x86_64-fedora-gcc

Version: 1.1.0
Check: tests
Result: ERROR
     Running ‘demos.R’ [14s/16s]
    Running the tests in ‘tests/demos.R’ failed.
    Last 13 lines of output:
     Loading required package: MASS
     [1] TRUE
    
     > require(kernlab) || stop("kernlab library required")
     Loading required package: kernlab
     [1] TRUE
    
     > require(RDRToolbox) || stop("RDRToolbox library required")
     Loading required package: RDRToolbox
     Error in eval(ei, envir) : RDRToolbox library required
     Calls: demo -> source -> withVisible -> eval -> eval
     In addition: Warning message:
     In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
     there is no package called 'RDRToolbox'
     Execution halted
Flavor: r-release-osx-x86_64

Version: 1.1.0
Check: whether package can be installed
Result: ERROR
    Installation failed.
Flavor: r-oldrel-osx-x86_64