major update and first official launch. CRAN is waiting.
Some checks are pending
pkgdown.yaml / pkgdown (push) Waiting to run

This commit is contained in:
Andreas Gammelgaard Damsbo 2024-10-10 12:14:41 +02:00
parent 464b842629
commit 3b035ab06f
218 changed files with 1761 additions and 410526 deletions

View file

@ -3,3 +3,10 @@
^LICENSE\.md$ ^LICENSE\.md$
^.*\.Rproj$ ^.*\.Rproj$
^\.Rproj\.user$ ^\.Rproj\.user$
^CODE_OF_CONDUCT\.md$
^app/
^publish_shiny.R
^_pkgdown\.yml$
^docs$
^pkgdown$
^\.github$

1
.github/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.html

50
.github/workflows/pkgdown.yaml vendored Normal file
View file

@ -0,0 +1,50 @@
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
release:
types: [published]
workflow_dispatch:
name: pkgdown.yaml
permissions: read-all
jobs:
pkgdown:
runs-on: ubuntu-latest
# Only restrict concurrency for non-PR jobs
concurrency:
group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }}
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: r-lib/actions/setup-pandoc@v2
- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true
- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::pkgdown, local::.
needs: website
- name: Build site
run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
shell: Rscript {0}
- name: Deploy to GitHub pages 🚀
if: github.event_name != 'pull_request'
uses: JamesIves/github-pages-deploy-action@v4.5.0
with:
clean: false
branch: gh-pages
folder: docs

1
.gitignore vendored
View file

@ -4,3 +4,4 @@
.httr-oauth .httr-oauth
.DS_Store .DS_Store
.quarto .quarto
docs

126
CODE_OF_CONDUCT.md Normal file
View file

@ -0,0 +1,126 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at andreas@gdamsbo.dk.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
<https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][https://github.com/mozilla/inclusion].
For answers to common questions about this code of conduct, see the FAQ at
<https://www.contributor-covenant.org/faq>. Translations are available at <https://www.contributor-covenant.org/translations>.
[homepage]: https://www.contributor-covenant.org

View file

@ -1,10 +1,14 @@
Package: prioritized-group-assignment Package: prioritized.grouping
Title: Group assignments based on participant prioritization Title: Group allocation based on individual subject prioritization
Version: 24.1.1 Version: 24.10.1
Authors@R: Authors@R:
person("Andreas Gammelgaard", "Damsbo", , "agdamsbo@clin.au.dk", role = c("aut", "cre"), person("Andreas Gammelgaard", "Damsbo", , "andreas@gdamsbo.dk", role = c("aut", "cre"),
comment = c(ORCID = "0000-0002-7559-1154")) comment = c(ORCID = "0000-0002-7559-1154"))
Description: Supply group Description:
Apply algorithmic grouping based on individual pritisations/costs, with the
option to allow for the so-called "pedagogical redraw", where some subjects
are manually grouped in consideration of other factors than only the
given priorities before the algorithmic grouping.
License: GPL (>= 3) License: GPL (>= 3)
Imports: Imports:
dplyr, dplyr,
@ -23,12 +27,17 @@ Imports:
shinylive, shinylive,
httpuv, httpuv,
here, here,
shiny,
cpp11, cpp11,
ROI.plugin.alabama ROI.plugin.alabama,
assertthat,
readODS
Suggests: Suggests:
pak, pak,
usethis usethis,
styler,
roxygen2,
devtools
Encoding: UTF-8 Encoding: UTF-8
Roxygen: list(markdown = TRUE) Roxygen: list(markdown = TRUE)
RoxygenNote: 7.0.0 RoxygenNote: 7.3.2
URL: https://agdamsbo.github.io/prioritized.grouping/

6
NAMESPACE Normal file
View file

@ -0,0 +1,6 @@
# Generated by roxygen2: do not edit by hand
S3method(plot,prioritized_groups_list)
export(file_extension)
export(grouping_plot)
export(prioritized_grouping)

22
NEWS.md Normal file
View file

@ -0,0 +1,22 @@
## Version 24.10.1
First proper public version. The package is mainly build for an easy to use
shiny-interface, but can as easily be used directly in *R* with the main
`prioritized_grouping` function. This function is mainly a wrapper around the `ROI`
package and the `ROI.plugin.symphony` plugin.
File types accepted in the shiny-app are .csv, .xls(x) and .ods.
This project was initially developed after a co-worker told me, he would be
grouping students by individual priorities by hand and was preparing to spend
most of a day doing so. I insisted on having a go at solving that problem in
*R*. Now some of the some functionality is baked into Teams (that is what I am
told at least), though that is not because of me. I still think is small app has
its value, as it allows for the so-called "pedagogical redraw", where some
students are manually grouped in consideration of other factors than only the
given priorities before the algorithmic assignment.
This, as said, is a first official version and working example.
More documentation is needed and will be added after further feedback. And
please, feedback is most welcome!

View file

@ -1,197 +0,0 @@
#' Solve group assignment based on
#'
#' @param ds data set
#' @param cap_classes class capacity. Numeric vector length 1 or length=number
#' of groups. If NULL equal group sizes are calculated. Default is NULL.
#' @param excess_space allowed excess group fill. Default is 1.2.
#' @param pre_assign Pre assigned data set. Optional.
#' @param set_solver choose the desired solver (originally "symphony").
#'
#' @return
#' @export
#'
#' @examples
#' read.csv(here::here("data/assign_sample.csv")) |> group_assignment()
group_assignment <-
function(ds,
cap_classes = NULL,
excess_space = 1.2,
pre_assign = NULL,
set_solver="symphony") {
require(ROI)
require(ROI.plugin.symphony)
if (!is.data.frame(ds)){
stop("Supplied data has to be a data frame, with each row
are subjects and columns are groups, with the first column being
subject identifiers")}
## This program very much trust the user to supply correctly formatted data
cost <- t(ds[,-1]) #Transpose converts to matrix
colnames(cost) <- ds[,1]
num_groups <- dim(cost)[1]
num_sub <- dim(cost)[2]
## Adding the option to introduce a bit of head room to the classes by
## the groups to a little bigger than the smallest possible
## Default is to allow for an extra 20 % fill
excess <- excess_space
# generous round up of capacities
if (is.null(cap_classes)) {
capacity <- rep(ceiling(excess*num_sub/num_groups), num_groups)
# } else if (!is.numeric(cap_classes)) {
# stop("cap_classes has to be numeric")
} else if (length(cap_classes)==1){
capacity <- ceiling(rep(cap_classes,num_groups)*excess)
} else if (length(cap_classes)==num_groups){
capacity <- ceiling(cap_classes*excess)
} else {
stop("cap_classes has to be either length 1 or same as number of groups")
}
## This test should be a little more elegant
## pre_assign should be a data.frame or matrix with an ID and assignment column
with_pre_assign <- FALSE
if (!is.null(pre_assign)){
# Setting flag for later and export list
with_pre_assign <- TRUE
# Splitting to list for later merging
pre <- split(pre_assign[,1],factor(pre_assign[,2],levels = seq_len(num_groups)))
# Subtracting capacity numbers, to reflect already filled spots
capacity <- capacity-lengths(pre)
# Making sure pre_assigned are removed from main data set
ds <- ds[!ds[[1]] %in% pre_assign[[1]],]
cost <- t(ds[,-1])
colnames(cost) <- ds[,1]
num_groups <- dim(cost)[1]
num_sub <- dim(cost)[2]
}
## Simple NA handling. Better to handle NAs yourself!
cost[is.na(cost)] <- num_groups
i_m <- seq_len(num_groups)
j_m <- seq_len(num_sub)
m <- ompr::MIPModel() |>
ompr::add_variable(grp[i, j],
i = i_m,
j = j_m,
type = "binary") |>
## The first constraint says that group size should not exceed capacity
ompr::add_constraint(ompr::sum_expr(grp[i, j], j = j_m) <= capacity[i],
i = i_m) |>
## The second constraint says each subject can only be in one group
ompr::add_constraint(ompr::sum_expr(grp[i, j], i = i_m) == 1, j = j_m) |>
## The objective is set to minimize the cost of the assignments
## Giving subjects the group with the highest possible ranking
ompr::set_objective(ompr::sum_expr(
cost[i, j] * grp[i, j],
i = i_m,
j = j_m
),
"min") |>
# ompr::solve_model(ompr.roi::with_ROI(solver = "symphony", verbosity = 1))
ompr::solve_model(ompr.roi::with_ROI(solver = set_solver, verbosity = 1))
## Getting assignments
solution <- ompr::get_solution(m, grp[i, j]) |> dplyr::filter(value > 0)
assign <- solution |> dplyr::select(i,j)
if (!is.null(rownames(cost))){
assign$i <- rownames(cost)[assign$i]
}
if (!is.null(colnames(cost))){
assign$j <- colnames(cost)[assign$j]
}
## Splitting into groups based on assignment
assign_ls <- split(assign$j,assign$i)
## Extracting subject cost for the final assignment for evaluation
if (is.null(rownames(cost))){
rownames(cost) <- seq_len(nrow(cost))
}
if (is.null(colnames(cost))){
colnames(cost) <- seq_len(ncol(cost))
}
eval <- lapply(seq_len(length(assign_ls)),function(i){
ndx <- match(names(assign_ls)[i],rownames(cost))
cost[ndx,assign_ls[[i]]]
})
names(eval) <- names(assign_ls)
if (with_pre_assign){
names(pre) <- names(assign_ls)
assign_all <- mapply(c, assign_ls, pre, SIMPLIFY=FALSE)
out <- list(all_assigned=assign_all)
} else {
out <- list(all_assigned=assign_ls)
}
export <- do.call(rbind,lapply(seq_along(out[[1]]),function(i){
cbind("ID"=out[[1]][[i]],"Group"=names(out[[1]])[i])
}))
out <- append(out,
list(evaluation=eval,
assigned=assign_ls,
solution = solution,
capacity = capacity,
excess = excess,
pre_assign = with_pre_assign,
cost_scale = levels(factor(cost)),
input=ds,
export=export))
# exists("excess")
return(out)
}
## Assessment performance overview
## The function plots costs of assignment for each subject in every group
assignment_plot <- function(lst){
dl <- lst[[2]]
cost_scale <- unique(lst[[8]])
cap <- lst[[5]]
cnts_ls <- lapply(dl,function(i){
factor(i,levels=cost_scale)
})
require(ggplot2)
require(patchwork)
require(viridisLite)
y_max <- max(lengths(dl))
wrap_plots(lapply(seq_along(dl),function(i){
ttl <- names(dl)[i]
ns <- length(dl[[i]])
cnts <- cnts_ls[[i]]
ggplot2::ggplot() + ggplot2::geom_bar(ggplot2::aes(cnts,fill=cnts)) +
ggplot2::scale_x_discrete(name = NULL, breaks=cost_scale, drop=FALSE) +
ggplot2::scale_y_continuous(name = NULL, limits = c(0,y_max)) +
ggplot2::scale_fill_manual(values = viridisLite::viridis(length(cost_scale), direction = -1)) +
ggplot2::guides(fill=FALSE) +
ggplot2::labs(title=paste0(ttl," (fill=",round(ns/cap[[i]],1),";m=",round(mean(dl[[i]]),1),";n=",ns ,")"))
}))
}
## Helper function for Shiny
file_extension <- function(filenames) {
sub(pattern = "^(.*\\.|[^.]+)(?=[^.]*)", replacement = "", filenames, perl = TRUE)
}

319
R/prioritized_grouping.R Normal file
View file

@ -0,0 +1,319 @@
utils::globalVariables(c("group", "grp", "i", "j", "value"))
#' Solve grouping based on priorities or costs.
#'
#' @param data data set in wide format. First column should bi ID, then one column
#' for each group containing cost/priorities.
#' @param cap_classes class capacity. Numeric vector length 1 or length=number
#' of groups. If NULL equal group sizes are calculated. Default is NULL.
#' @param excess_space allowed excess group fill in percentage. Default is 20.
#' Supplied group capacities will be enlarged by this factors and rounded up.
#' @param pre_grouped Pre grouped data set. Optional. Should contain two
#' columns, 'id' and 'group', with 'group' containing the given group index.
#' @param seed specify a seed value. For complex problems.
#'
#' @return list of custom class 'prioritized_groups_list'
#' @export
#'
#' @examples
#' prioritized_grouping(
#' data=read.csv(here::here("data/prioritized_sample.csv")),
#' pre_grouped=read.csv(here::here("data/pre_grouped.csv"))) |> plot()
prioritized_grouping <-
function(data,
cap_classes = NULL,
excess_space = 20,
pre_grouped = NULL,
seed = 6293812) {
set.seed(seed = seed)
# browser()
requireNamespace("ROI")
requireNamespace("ROI.plugin.symphony")
if (!is.data.frame(data)) {
stop("Supplied data has to be a data frame, with each row
are subjects and columns are groups, with the first column being
subject identifiers")
}
## This program very much trust the user to supply correctly formatted data
cost <- t(data[, -1]) # Transpose converts to matrix
colnames(cost) <- data[, 1]
nms_groups <- rownames(cost)
num_groups <- dim(cost)[1]
num_sub <- dim(cost)[2]
## Adding the option to introduce a bit of head room to the classes by
## the groups to a little bigger than the smallest possible
## Default is to allow for an extra 20 % fill
excess <- 1 + (excess_space / 100)
# generous round up of capacities
if (is.null(cap_classes)) {
capacity <- rep(ceiling(excess * num_sub / num_groups), num_groups)
# } else if (!is.numeric(cap_classes)) {
# stop("cap_classes has to be numeric")
} else if (length(cap_classes) == 1) {
capacity <- ceiling(rep(cap_classes, num_groups) * excess)
} else if (length(cap_classes) == num_groups) {
capacity <- ceiling(cap_classes * excess)
} else {
stop("cap_classes has to be either length 1 or same as number of groups")
}
## This test should be a little more elegant
## pre_grouped should be a data.frame or matrix with an ID and group column
with_pre_grouped <- FALSE
if (!is.null(pre_grouped)) {
# Setting flag for later and export list
with_pre_grouped <- TRUE
# Simple translation to allow pre_grouped to denote indices
if (is.numeric(pre_grouped[, 2])){
pre_grouped$pre.groups <- nms_groups[pre_grouped[, 2]]
} else {
pre_grouped$pre.groups <- as.character(pre_grouped[, 2])
}
# Splitting to list for later merging
pre <- split(
pre_grouped[, 1],
factor(pre_grouped[, 3], levels = nms_groups)
)
# Subtracting capacity numbers, to reflect already filled spots
capacity <- capacity - lengths(pre)
# Making sure pre_grouped are removed from main data set
data <- data[!data[[1]] %in% pre_grouped[[1]], ]
cost <- t(data[, -1])
colnames(cost) <- data[, 1]
num_groups <- dim(cost)[1]
num_sub <- dim(cost)[2]
}
## Simple NA handling. Better to handle NAs yourself!
cost[is.na(cost)] <- num_groups
i_m <- seq_len(num_groups)
j_m <- seq_len(num_sub)
m <- ompr::MIPModel() |>
ompr::add_variable(grp[i, j],
i = i_m,
j = j_m,
type = "binary"
) |>
## The first constraint says that group size should not exceed capacity
ompr::add_constraint(ompr::sum_expr(grp[i, j], j = j_m) <= capacity[i],
i = i_m
) |>
## The second constraint says each subject can only be in one group
ompr::add_constraint(ompr::sum_expr(grp[i, j], i = i_m) == 1, j = j_m) |>
## The objective is set to minimize the cost of the grouping
## Giving subjects the group with the highest possible ranking
ompr::set_objective(
ompr::sum_expr(
cost[i, j] * grp[i, j],
i = i_m,
j = j_m
),
"min"
) |>
ompr::solve_model(ompr.roi::with_ROI(solver = "symphony", verbosity = 1))
if (m$status == "error") {
stop("The algorithm is not able to solve the problem. Please adjust the
constraints by increasing group capacities and/or excess fill")
}
## Getting groups
solution <- ompr::get_solution(m, grp[i, j]) |> dplyr::filter(value > 0)
grouped <- solution |> dplyr::select(i, j)
if (!is.null(rownames(cost))) {
grouped$i <- rownames(cost)[grouped$i]
}
if (!is.null(colnames(cost))) {
grouped$j <- colnames(cost)[grouped$j]
}
## Splitting into groups based on groups
grouped_ls <- split(grouped$j, grouped$i)
## Extracting subject cost for the final groups for evaluation
if (is.null(rownames(cost))) {
rownames(cost) <- seq_len(nrow(cost))
}
if (is.null(colnames(cost))) {
colnames(cost) <- seq_len(ncol(cost))
}
evaluated <- lapply(seq_len(length(grouped_ls)), function(i) {
ndx <- match(names(grouped_ls)[i], rownames(cost))
cost[ndx, grouped_ls[[i]]]
})
names(evaluated) <- names(grouped_ls)
if (with_pre_grouped) {
names(pre) <- names(grouped_ls)
grouped_all <- mapply(c, grouped_ls, pre, SIMPLIFY = FALSE)
out <- list(all_grouped = grouped_all)
} else {
out <- list(all_grouped = grouped_ls)
}
export <- do.call(rbind, lapply(seq_along(out[[1]]), function(i) {
cbind("ID" = out[[1]][[i]], "Group" = names(out[[1]])[i])
}))
out <- c(
out,
list(
evaluation = evaluated,
groupings = grouped_ls,
solution = solution,
capacity = capacity,
excess = excess,
pre_grouped = with_pre_grouped,
cost_scale = levels(factor(cost)),
input = data,
export = export
)
)
# exists("excess")
class(out) <- c("prioritized_groups_list", class(out))
return(out)
}
#' Assessment performance overview
#' @description
#' The function plots costs of grouping for each subject in every group.
#' Performance measures printed are fill: fraction of filling relative to the
#' capacity specified; mean: mean priority/cost in group; n: number of subjects
#' in the group.
#'
#' @param data A "prioritized_groups_list" class list from
#' 'prioritized_grouping()'
#' @param columns number of columns in plot
#' @param overall logical to only print overall groups mean priority/cost
#' @param viridis.option option value passed on to 'viridisLite::viridis'.
#' Default="D".
#' @param viridis.direction direction value passed on to 'viridisLite::viridis'.
#' Default=-1.
#'
#' @return ggplot2 list object
#' @export
#'
#' @examples
#' #read.csv(here::here("data/prioritized_sample.csv")) |>
#' # prioritized_grouping(cap_classes = sample(4:12, 17, TRUE)) |>
#' # grouping_plot()
grouping_plot <- function(data,
columns = NULL,
overall = FALSE,
viridis.option="D",
viridis.direction=-1) {
assertthat::assert_that("prioritized_groups_list" %in% class(data))
dl <- data[[2]]
cost_scale <- unique(data[[8]])
cap <- data[[5]]
cnts_ls <- lapply(dl, function(i) {
factor(i, levels = cost_scale)
})
y_max <- max(lengths(dl))
if (overall) {
ds <- tibble::tibble(
group = seq_along(dl),
mean = round(Reduce(c, lapply(dl, mean)), 1)
)
out <- ds |>
ggplot2::ggplot(ggplot2::aes(x = group, y = mean, fill = mean)) +
ggplot2::geom_bar(stat = "identity") +
ggplot2::geom_hline(yintercept = 1) +
ggplot2::scale_fill_viridis_c(option=viridis.option,
direction = viridis.direction) +
ggplot2::guides(fill = "none") +
ggplot2::scale_x_continuous(name = "Groups", breaks = ds$group) +
ggplot2::ylab("Mean priority/cost") +
ggplot2::labs(
title = "Overall group-wise mean priority/cost of groupings",
subtitle = "Horizontal line marking the perfect mean=1 for reference"
)
} else {
out <- lapply(seq_along(dl), function(i) {
ttl <- names(dl)[i]
ns <- length(dl[[i]])
cnts <- cnts_ls[[i]]
ggplot2::ggplot() +
ggplot2::geom_bar(ggplot2::aes(cnts, fill = cnts)) +
ggplot2::scale_x_discrete(
name = NULL,
breaks = cost_scale,
drop = FALSE
) +
ggplot2::scale_y_continuous(name = NULL, limits = c(0, y_max)) +
ggplot2::scale_fill_manual(
values = viridisLite::viridis(length(cost_scale),
direction = viridis.direction,
option = viridis.option)
) +
ggplot2::guides(fill = "none") +
ggplot2::labs(
title =
paste0(
ttl, " (fill=", round(ns / cap[[i]], 1), ";n=", ns, ";mean=",
round(mean(dl[[i]]), 1), ")"
)
)
}) |>
patchwork::wrap_plots(ncol = columns)
}
return(out)
}
#' Plot extension for easy groupings plot
#'
#' @param data data of class 'prioritized_groups_list'
#' @param ... passed on to 'grouping_plot()'
#'
#' @return ggplot2 list object
#' @export
#'
#' @examples
#' read.csv(here::here("data/prioritized_sample.csv")) |>
#' prioritized_grouping() |>
#' plot(overall = TRUE, viridis.option="D",viridis.direction=-1)
plot.prioritized_groups_list <- function(data, ...) {
grouping_plot(data, ...)
}
## Helper function for Shiny
#' Title
#'
#' @param filenames character vector of file name. Splits at the last '.'.
#'
#' @return character vector of extension
#' @export
#'
#' @examples
#' file_extension("data/prioritized_sample.csv")
file_extension <- function(filenames) {
sub(
pattern = "^(.*\\.|[^.]+)(?=[^.]*)",
replacement = "",
filenames, perl = TRUE
)
}

View file

@ -1,14 +1,23 @@
# First try with shinylive # Group allocation based on individual subject prioritization
Reviving an old project to use shinylive with R This project was initially developed after a co-worker told me, he would be grouping students by individual priorities by hand and was preparing to spend most of a day doing so. I insisted on having a go at solving that problem in *R*. Now some of the some functionality is baked into Teams (that is what I am told at least), though that is not because of me.
The functionality has later been further extended to allow for the so-called "pedagogical redraw", where some students are manually grouped in consideration of other factors than only the given priorities before the algorithmic assignment. This single addition makes it quite useful in schools and other educational institutions, as some customisation is allowed before the grouping.
## Shortcoming ## Shiny version
This project requires ROI.plugin.symphony to solve the problem, which depends on the RSymphony project (which again adapts SYMPHONY MILP), which is not [compiled for webR](https://repo.r-wasm.org/). I am hosting a shiny version of this package, that allows to use the majority of functions.
[Use the app here](https://agdamsbo.shinyapps.io/prioritized-grouping/)
I have also attempted to package this as a shinylive program, but the "Symphony" solver has not been build to run in `{webr}`. When/if this happens, I will have another go.
## Install the `{prioritized.grouping}` package
Clone the project and run the solver with
``` ```
shiny::runApp(appDir = here::here("R/"),launch.browser = TRUE) pak::pak("agdamsbo/prioritized.grouping")
``` ```
## Code of Conduct
Please note that the prioritized.grouping project is released with a [Contributor Code of Conduct](https://contributor-covenant.org/version/2/1/CODE_OF_CONDUCT.html). By contributing to this project, you agree to abide by its terms.

4
_pkgdown.yml Normal file
View file

@ -0,0 +1,4 @@
url: https://agdamsbo.github.io/prioritized.grouping/
template:
bootstrap: 5

View file

@ -0,0 +1,10 @@
name: prioritized-grouping
title:
username: agdamsbo
account: agdamsbo
server: shinyapps.io
hostUrl: https://api.shinyapps.io/v1
appId: 12977223
bundleId: 9205937
url: https://agdamsbo.shinyapps.io/prioritized-grouping/
version: 1

436
app/server.R Normal file
View file

@ -0,0 +1,436 @@
########
#### Current file: R//prioritized_grouping.R
########
utils::globalVariables(c("group", "grp", "i", "j", "value"))
prioritized_grouping <-
function(data,
cap_classes = NULL,
excess_space = 20,
pre_grouped = NULL,
seed = 6293812) {
set.seed(seed = seed)
# browser()
requireNamespace("ROI")
requireNamespace("ROI.plugin.symphony")
if (!is.data.frame(data)) {
stop("Supplied data has to be a data frame, with each row
are subjects and columns are groups, with the first column being
subject identifiers")
}
## This program very much trust the user to supply correctly formatted data
cost <- t(data[, -1]) # Transpose converts to matrix
colnames(cost) <- data[, 1]
nms_groups <- rownames(cost)
num_groups <- dim(cost)[1]
num_sub <- dim(cost)[2]
## Adding the option to introduce a bit of head room to the classes by
## the groups to a little bigger than the smallest possible
## Default is to allow for an extra 20 % fill
excess <- 1 + (excess_space / 100)
# generous round up of capacities
if (is.null(cap_classes)) {
capacity <- rep(ceiling(excess * num_sub / num_groups), num_groups)
# } else if (!is.numeric(cap_classes)) {
# stop("cap_classes has to be numeric")
} else if (length(cap_classes) == 1) {
capacity <- ceiling(rep(cap_classes, num_groups) * excess)
} else if (length(cap_classes) == num_groups) {
capacity <- ceiling(cap_classes * excess)
} else {
stop("cap_classes has to be either length 1 or same as number of groups")
}
## This test should be a little more elegant
## pre_grouped should be a data.frame or matrix with an ID and group column
with_pre_grouped <- FALSE
if (!is.null(pre_grouped)) {
# Setting flag for later and export list
with_pre_grouped <- TRUE
# Simple translation to allow pre_grouped to denote indices
if (is.numeric(pre_grouped[, 2])){
pre_grouped$pre.groups <- nms_groups[pre_grouped[, 2]]
} else {
pre_grouped$pre.groups <- as.character(pre_grouped[, 2])
}
# Splitting to list for later merging
pre <- split(
pre_grouped[, 1],
factor(pre_grouped[, 3], levels = nms_groups)
)
# Subtracting capacity numbers, to reflect already filled spots
capacity <- capacity - lengths(pre)
# Making sure pre_grouped are removed from main data set
data <- data[!data[[1]] %in% pre_grouped[[1]], ]
cost <- t(data[, -1])
colnames(cost) <- data[, 1]
num_groups <- dim(cost)[1]
num_sub <- dim(cost)[2]
}
## Simple NA handling. Better to handle NAs yourself!
cost[is.na(cost)] <- num_groups
i_m <- seq_len(num_groups)
j_m <- seq_len(num_sub)
m <- ompr::MIPModel() |>
ompr::add_variable(grp[i, j],
i = i_m,
j = j_m,
type = "binary"
) |>
## The first constraint says that group size should not exceed capacity
ompr::add_constraint(ompr::sum_expr(grp[i, j], j = j_m) <= capacity[i],
i = i_m
) |>
## The second constraint says each subject can only be in one group
ompr::add_constraint(ompr::sum_expr(grp[i, j], i = i_m) == 1, j = j_m) |>
## The objective is set to minimize the cost of the grouping
## Giving subjects the group with the highest possible ranking
ompr::set_objective(
ompr::sum_expr(
cost[i, j] * grp[i, j],
i = i_m,
j = j_m
),
"min"
) |>
ompr::solve_model(ompr.roi::with_ROI(solver = "symphony", verbosity = 1))
if (m$status == "error") {
stop("The algorithm is not able to solve the problem. Please adjust the
constraints by increasing group capacities and/or excess fill")
}
## Getting groups
solution <- ompr::get_solution(m, grp[i, j]) |> dplyr::filter(value > 0)
grouped <- solution |> dplyr::select(i, j)
if (!is.null(rownames(cost))) {
grouped$i <- rownames(cost)[grouped$i]
}
if (!is.null(colnames(cost))) {
grouped$j <- colnames(cost)[grouped$j]
}
## Splitting into groups based on groups
grouped_ls <- split(grouped$j, grouped$i)
## Extracting subject cost for the final groups for evaluation
if (is.null(rownames(cost))) {
rownames(cost) <- seq_len(nrow(cost))
}
if (is.null(colnames(cost))) {
colnames(cost) <- seq_len(ncol(cost))
}
evaluated <- lapply(seq_len(length(grouped_ls)), function(i) {
ndx <- match(names(grouped_ls)[i], rownames(cost))
cost[ndx, grouped_ls[[i]]]
})
names(evaluated) <- names(grouped_ls)
if (with_pre_grouped) {
names(pre) <- names(grouped_ls)
grouped_all <- mapply(c, grouped_ls, pre, SIMPLIFY = FALSE)
out <- list(all_grouped = grouped_all)
} else {
out <- list(all_grouped = grouped_ls)
}
export <- do.call(rbind, lapply(seq_along(out[[1]]), function(i) {
cbind("ID" = out[[1]][[i]], "Group" = names(out[[1]])[i])
}))
out <- c(
out,
list(
evaluation = evaluated,
groupings = grouped_ls,
solution = solution,
capacity = capacity,
excess = excess,
pre_grouped = with_pre_grouped,
cost_scale = levels(factor(cost)),
input = data,
export = export
)
)
# exists("excess")
class(out) <- c("prioritized_groups_list", class(out))
return(out)
}
grouping_plot <- function(data,
columns = NULL,
overall = FALSE,
viridis.option="D",
viridis.direction=-1) {
assertthat::assert_that("prioritized_groups_list" %in% class(data))
dl <- data[[2]]
cost_scale <- unique(data[[8]])
cap <- data[[5]]
cnts_ls <- lapply(dl, function(i) {
factor(i, levels = cost_scale)
})
y_max <- max(lengths(dl))
if (overall) {
ds <- tibble::tibble(
group = seq_along(dl),
mean = round(Reduce(c, lapply(dl, mean)), 1)
)
out <- ds |>
ggplot2::ggplot(ggplot2::aes(x = group, y = mean, fill = mean)) +
ggplot2::geom_bar(stat = "identity") +
ggplot2::geom_hline(yintercept = 1) +
ggplot2::scale_fill_viridis_c(option=viridis.option,
direction = viridis.direction) +
ggplot2::guides(fill = "none") +
ggplot2::scale_x_continuous(name = "Groups", breaks = ds$group) +
ggplot2::ylab("Mean priority/cost") +
ggplot2::labs(
title = "Overall group-wise mean priority/cost of groupings",
subtitle = "Horizontal line marking the perfect mean=1 for reference"
)
} else {
out <- lapply(seq_along(dl), function(i) {
ttl <- names(dl)[i]
ns <- length(dl[[i]])
cnts <- cnts_ls[[i]]
ggplot2::ggplot() +
ggplot2::geom_bar(ggplot2::aes(cnts, fill = cnts)) +
ggplot2::scale_x_discrete(
name = NULL,
breaks = cost_scale,
drop = FALSE
) +
ggplot2::scale_y_continuous(name = NULL, limits = c(0, y_max)) +
ggplot2::scale_fill_manual(
values = viridisLite::viridis(length(cost_scale),
direction = viridis.direction,
option = viridis.option)
) +
ggplot2::guides(fill = "none") +
ggplot2::labs(
title =
paste0(
ttl, " (fill=", round(ns / cap[[i]], 1), ";n=", ns, ";mean=",
round(mean(dl[[i]]), 1), ")"
)
)
}) |>
patchwork::wrap_plots(ncol = columns)
}
return(out)
}
plot.prioritized_groups_list <- function(data, ...) {
grouping_plot(data, ...)
}
## Helper function for Shiny
file_extension <- function(filenames) {
sub(
pattern = "^(.*\\.|[^.]+)(?=[^.]*)",
replacement = "",
filenames, perl = TRUE
)
}
########
#### Current file: app/server_raw.R
########
library(shiny)
server <- function(input, output, session) {
# source("https://git.nikohuru.dk/au-phd/PhysicalActivityandStrokeOutcome/raw/branch/main/side%20projects/assignment.R")
# source(here::here("R/group_assign.R"))
dat <- reactive({
# input$file1 will be NULL initially. After the user selects
# and uploads a file, head of that data file by default,
# or all rows if selected, will be shown.
req(input$file1)
# Make laoding dependent of file name extension (file_ext())
ext <- file_extension(input$file1$datapath)
tryCatch(
{
if (ext == "csv") {
df <- utils::read.csv(input$file1$datapath,na.strings = c("NA", '""',""))
} else if (ext %in% c("xls", "xlsx")) {
df <- openxlsx::read.xlsx(input$file1$datapath,na.strings = c("NA", '""',""))
} else if (ext == "ods") {
df <- readODS::read_ods(file = file)
} else {
stop("Input file format has to be on of:
'.csv', '.xls', '.xlsx' or '.ods'")
}
},
error = function(e) {
# return a safeError if a parsing error occurs
stop(safeError(e))
}
)
return(df)
})
dat_pre <- reactive({
# req(input$file2)
# Make laoding dependent of file name extension (file_ext())
if (!is.null(input$file2$datapath)){
ext <- file_extension(input$file2$datapath)
if (ext == "csv") {
df <- utils::read.csv(input$file2$datapath,na.strings = c("NA", '""',""))
} else if (ext %in% c("xls", "xlsx")) {
df <- openxlsx::read.xlsx(input$file2$datapath,na.strings = c("NA", '""',""))
} else if (ext == "ods") {
df <- readODS::read_ods(file = file)
} else {
stop("Input file format has to be on of:
'.csv', '.xls', '.xlsx' or '.ods'")
}
return(df)
} else {
return(NULL)
}
})
groups <-
reactive({
grouped <- prioritized_grouping(
data = dat(),
excess_space = input$excess,
pre_grouped = dat_pre()
)
return(grouped)
})
plot.overall <- reactive({
dplyr::case_match(input$overall.plot,
"yes"~TRUE,
"no"~FALSE,
.default=NULL)
})
output$raw.data.tbl <- renderTable({
groups()$export
})
output$pre.groups <- renderTable({
dat_pre()
})
output$input <- renderTable({
dat()
})
output$groups.plt <- renderPlot({
grouping_plot(groups(),overall = plot.overall())
})
# Downloadable csv of selected dataset ----
output$downloadData <- downloadHandler(
filename = "prioritized_grouping.csv",
content = function(file) {
write.csv(groups()$export, file, row.names = FALSE)
}
)
}

View file

@ -1,7 +1,7 @@
library(shiny) library(shiny)
server <- function(input, output, session) { server <- function(input, output, session) {
# source("https://git.nikohuru.dk/au-phd/PhysicalActivityandStrokeOutcome/raw/branch/main/side%20projects/assignment.R") # source("https://git.nikohuru.dk/au-phd/PhysicalActivityandStrokeOutcome/raw/branch/main/side%20projects/assignment.R")
source(here::here("R/group_assign.R")) # source(here::here("R/group_assign.R"))
dat <- reactive({ dat <- reactive({
# input$file1 will be NULL initially. After the user selects # input$file1 will be NULL initially. After the user selects
@ -15,12 +15,14 @@ server <- function(input, output, session) {
tryCatch( tryCatch(
{ {
if (ext == "csv") { if (ext == "csv") {
df <- read.csv(input$file1$datapath,na.strings = c("NA", '""',"")) df <- utils::read.csv(input$file1$datapath,na.strings = c("NA", '""',""))
} else if (ext %in% c("xls", "xlsx")) { } else if (ext %in% c("xls", "xlsx")) {
df <- openxlsx::read.xlsx(input$file1$datapath,na.strings = c("NA", '""',"")) df <- openxlsx::read.xlsx(input$file1$datapath,na.strings = c("NA", '""',""))
} else if (ext == "ods") {
df <- readODS::read_ods(file = file)
} else { } else {
stop("Input file format has to be either '.csv', '.xls' or '.xlsx'") stop("Input file format has to be on of:
'.csv', '.xls', '.xlsx' or '.ods'")
} }
}, },
error = function(e) { error = function(e) {
@ -40,12 +42,14 @@ server <- function(input, output, session) {
ext <- file_extension(input$file2$datapath) ext <- file_extension(input$file2$datapath)
if (ext == "csv") { if (ext == "csv") {
df <- read.csv(input$file2$datapath,na.strings = c("NA", '""',"")) df <- utils::read.csv(input$file2$datapath,na.strings = c("NA", '""',""))
} else if (ext %in% c("xls", "xlsx")) { } else if (ext %in% c("xls", "xlsx")) {
df <- openxlsx::read.xlsx(input$file2$datapath,na.strings = c("NA", '""',"")) df <- openxlsx::read.xlsx(input$file2$datapath,na.strings = c("NA", '""',""))
} else if (ext == "ods") {
df <- readODS::read_ods(file = file)
} else { } else {
stop("Input file format has to be either '.csv', '.xls' or '.xlsx'") stop("Input file format has to be on of:
'.csv', '.xls', '.xlsx' or '.ods'")
} }
return(df) return(df)
@ -55,22 +59,29 @@ server <- function(input, output, session) {
}) })
assign <- groups <-
reactive({ reactive({
assigned <- group_assignment( grouped <- prioritized_grouping(
ds = dat(), data = dat(),
excess_space = input$ecxess, excess_space = input$excess,
pre_assign = dat_pre() pre_grouped = dat_pre()
) )
return(assigned) return(grouped)
}) })
output$raw.data.tbl <- renderTable({ plot.overall <- reactive({
assign()$export dplyr::case_match(input$overall.plot,
"yes"~TRUE,
"no"~FALSE,
.default=NULL)
}) })
output$pre.assign <- renderTable({ output$raw.data.tbl <- renderTable({
groups()$export
})
output$pre.groups <- renderTable({
dat_pre() dat_pre()
}) })
@ -78,16 +89,16 @@ server <- function(input, output, session) {
dat() dat()
}) })
output$assign.plt <- renderPlot({ output$groups.plt <- renderPlot({
assignment_plot(assign()) grouping_plot(groups(),overall = plot.overall())
}) })
# Downloadable csv of selected dataset ---- # Downloadable csv of selected dataset ----
output$downloadData <- downloadHandler( output$downloadData <- downloadHandler(
filename = "group_assignment.csv", filename = "prioritized_grouping.csv",
content = function(file) { content = function(file) {
write.csv(assign()$export, file, row.names = FALSE) write.csv(groups()$export, file, row.names = FALSE)
} }
) )

View file

@ -4,8 +4,8 @@ ui <- fluidPage(
## Application title ## Application title
## ----------------------------------------------------------------------------- ## -----------------------------------------------------------------------------
titlePanel("Assign groups based on costs/priorities.", titlePanel("Group allocation based on individual subject prioritization.",
windowTitle = "Group assignment calculator"), windowTitle = "Prioritized grouping calculator"),
h5( h5(
"Please note this calculator is only meant as a proof of concept for educational purposes, "Please note this calculator is only meant as a proof of concept for educational purposes,
and the author will take no responsibility for the results of the calculator. and the author will take no responsibility for the results of the calculator.
@ -23,10 +23,10 @@ ui <- fluidPage(
sidebarLayout( sidebarLayout(
sidebarPanel( sidebarPanel(
numericInput( numericInput(
inputId = "ecxess", inputId = "excess",
label = "Excess space", label = "Excess space (%)",
value = 1, value = 20,
step = .05 step = 5
), ),
p("As default, the program will try to evenly distribute subjects in groups. p("As default, the program will try to evenly distribute subjects in groups.
This factor will add more capacity to each group, for an overall lesser cost, This factor will add more capacity to each group, for an overall lesser cost,
@ -43,7 +43,7 @@ ui <- fluidPage(
label = "Choose main data file", label = "Choose main data file",
multiple = FALSE, multiple = FALSE,
accept = c( accept = c(
".csv",".xls",".xlsx" ".csv",".xls",".xlsx", ".ods"
) )
), ),
strong("Columns: ID, group1, group2, ... groupN."), strong("Columns: ID, group1, group2, ... groupN."),
@ -52,6 +52,16 @@ ui <- fluidPage(
Lowest score, for highest priority. Lowest score, for highest priority.
Non-ranked should contain a number (eg lowest score+1). Non-ranked should contain a number (eg lowest score+1).
Will handle missings but try to avoid."), Will handle missings but try to avoid."),
shiny::radioButtons(
inputId = "overall.plot",
label = "Print overall mean grouping priorities/costs only?",
selected = "no",
choices = list(
"Yes" = "yes",
"No" = "no"
)
),
fileInput( fileInput(
inputId = "file2", inputId = "file2",
@ -85,11 +95,11 @@ ui <- fluidPage(
tabPanel( tabPanel(
"Summary", "Summary",
h3("Assignment plot"), h3("Grouping plot"),
p("These plots are to summarise simple performance meassures for the assignment. p("These plots are to summarise simple performance meassures for the assignment.
'f' is group fill fraction and 'm' is mean cost in group."), 'f' is group fill fraction and 'm' is mean cost in group."),
plotOutput("assign.plt") plotOutput("groups.plt")
), ),
@ -112,7 +122,7 @@ ui <- fluidPage(
h3("Pre-assigned groups"), h3("Pre-assigned groups"),
p("Appears empty if none is uploaded."), p("Appears empty if none is uploaded."),
htmlOutput("pre.assign", container = span) htmlOutput("pre.groups", container = span)
) )

File diff suppressed because one or more lines are too long

View file

@ -1,34 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Shiny examples browser</title>
<script
src="../shinylive/load-shinylive-sw.js"
type="module"
></script>
<script src="../shinylive/jquery.min.js"></script>
<script src="../shinylive/jquery.terminal/js/jquery.terminal.min.js"></script>
<link
href="../shinylive/jquery.terminal/css/jquery.terminal.min.css"
rel="stylesheet"
/>
<script type="module">
import { runApp } from "../shinylive/shinylive.js";
const response = await fetch("../app.json");
if (!response.ok) {
throw new Error("HTTP error loading app.json: " + response.status);
}
const appFiles = await response.json();
const appRoot = document.getElementById("root");
runApp(appRoot, "editor-terminal-viewer", {startFiles: appFiles}, "r");
</script>
<link rel="stylesheet" href="../shinylive/style-resets.css" />
<link rel="stylesheet" href="../shinylive/shinylive.css" />
</head>
<body>
<div style="height: 100vh; width: 100vw" id="root"></div>
</body>
</html>

View file

@ -1,28 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Shiny App</title>
<script
src="./shinylive/load-shinylive-sw.js"
type="module"
></script>
<script type="module">
import { runApp } from "./shinylive/shinylive.js";
const response = await fetch("./app.json");
if (!response.ok) {
throw new Error("HTTP error loading app.json: " + response.status);
}
const appFiles = await response.json();
const appRoot = document.getElementById("root");
runApp(appRoot, "viewer", {startFiles: appFiles}, "r");
</script>
<link rel="stylesheet" href="./shinylive/style-resets.css" />
<link rel="stylesheet" href="./shinylive/shinylive.css" />
</head>
<body>
<div style="height: 100vh; width: 100vw" id="root"></div>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -1,498 +0,0 @@
/* Shinylive 0.2.3
// Copyright 2023 RStudio, PBC */
/* node_modules/balloon-css/balloon.min.css */
:root {
--balloon-border-radius: 2px;
--balloon-color: rgba(16,16,16,0.95);
--balloon-text-color: #fff;
--balloon-font-size: 12px;
--balloon-move: 4px;
}
button[aria-label][data-balloon-pos] {
overflow: visible;
}
[aria-label][data-balloon-pos] {
position: relative;
cursor: pointer;
}
[aria-label][data-balloon-pos]:after {
opacity: 0;
pointer-events: none;
transition: all 0.18s ease-out 0.18s;
text-indent: 0;
font-family:
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
Oxygen,
Ubuntu,
Cantarell,
"Open Sans",
"Helvetica Neue",
sans-serif;
font-weight: normal;
font-style: normal;
text-shadow: none;
font-size: var(--balloon-font-size);
background: var(--balloon-color);
border-radius: 2px;
color: var(--balloon-text-color);
border-radius: var(--balloon-border-radius);
content: attr(aria-label);
padding: .5em 1em;
position: absolute;
white-space: nowrap;
z-index: 10;
}
[aria-label][data-balloon-pos]:before {
width: 0;
height: 0;
border: 5px solid transparent;
border-top-color: var(--balloon-color);
opacity: 0;
pointer-events: none;
transition: all 0.18s ease-out 0.18s;
content: "";
position: absolute;
z-index: 10;
}
[aria-label][data-balloon-pos]:hover:before,
[aria-label][data-balloon-pos]:hover:after,
[aria-label][data-balloon-pos][data-balloon-visible]:before,
[aria-label][data-balloon-pos][data-balloon-visible]:after,
[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:before,
[aria-label][data-balloon-pos]:not([data-balloon-nofocus]):focus:after {
opacity: 1;
pointer-events: none;
}
[aria-label][data-balloon-pos].font-awesome:after {
font-family:
FontAwesome,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
Oxygen,
Ubuntu,
Cantarell,
"Open Sans",
"Helvetica Neue",
sans-serif;
}
[aria-label][data-balloon-pos][data-balloon-break]:after {
white-space: pre;
}
[aria-label][data-balloon-pos][data-balloon-break][data-balloon-length]:after {
white-space: pre-line;
word-break: break-word;
}
[aria-label][data-balloon-pos][data-balloon-blunt]:before,
[aria-label][data-balloon-pos][data-balloon-blunt]:after {
transition: none;
}
[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:after,
[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:after,
[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:after,
[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:after {
transform: translate(-50%, 0);
}
[aria-label][data-balloon-pos][data-balloon-pos=up]:hover:before,
[aria-label][data-balloon-pos][data-balloon-pos=up][data-balloon-visible]:before,
[aria-label][data-balloon-pos][data-balloon-pos=down]:hover:before,
[aria-label][data-balloon-pos][data-balloon-pos=down][data-balloon-visible]:before {
transform: translate(-50%, 0);
}
[aria-label][data-balloon-pos][data-balloon-pos*=-left]:after {
left: 0;
}
[aria-label][data-balloon-pos][data-balloon-pos*=-left]:before {
left: 5px;
}
[aria-label][data-balloon-pos][data-balloon-pos*=-right]:after {
right: 0;
}
[aria-label][data-balloon-pos][data-balloon-pos*=-right]:before {
right: 5px;
}
[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:after,
[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:after,
[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:after,
[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:after {
transform: translate(0, 0);
}
[aria-label][data-balloon-pos][data-balloon-po*=-left]:hover:before,
[aria-label][data-balloon-pos][data-balloon-po*=-left][data-balloon-visible]:before,
[aria-label][data-balloon-pos][data-balloon-pos*=-right]:hover:before,
[aria-label][data-balloon-pos][data-balloon-pos*=-right][data-balloon-visible]:before {
transform: translate(0, 0);
}
[aria-label][data-balloon-pos][data-balloon-pos^=up]:before,
[aria-label][data-balloon-pos][data-balloon-pos^=up]:after {
bottom: 100%;
transform-origin: top;
transform: translate(0, var(--balloon-move));
}
[aria-label][data-balloon-pos][data-balloon-pos^=up]:after {
margin-bottom: 10px;
}
[aria-label][data-balloon-pos][data-balloon-pos=up]:before,
[aria-label][data-balloon-pos][data-balloon-pos=up]:after {
left: 50%;
transform: translate(-50%, var(--balloon-move));
}
[aria-label][data-balloon-pos][data-balloon-pos^=down]:before,
[aria-label][data-balloon-pos][data-balloon-pos^=down]:after {
top: 100%;
transform: translate(0, calc(var(--balloon-move) * -1));
}
[aria-label][data-balloon-pos][data-balloon-pos^=down]:after {
margin-top: 10px;
}
[aria-label][data-balloon-pos][data-balloon-pos^=down]:before {
width: 0;
height: 0;
border: 5px solid transparent;
border-bottom-color: var(--balloon-color);
}
[aria-label][data-balloon-pos][data-balloon-pos=down]:after,
[aria-label][data-balloon-pos][data-balloon-pos=down]:before {
left: 50%;
transform: translate(-50%, calc(var(--balloon-move) * -1));
}
[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:after,
[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:after,
[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:after,
[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:after {
transform: translate(0, -50%);
}
[aria-label][data-balloon-pos][data-balloon-pos=left]:hover:before,
[aria-label][data-balloon-pos][data-balloon-pos=left][data-balloon-visible]:before,
[aria-label][data-balloon-pos][data-balloon-pos=right]:hover:before,
[aria-label][data-balloon-pos][data-balloon-pos=right][data-balloon-visible]:before {
transform: translate(0, -50%);
}
[aria-label][data-balloon-pos][data-balloon-pos=left]:after,
[aria-label][data-balloon-pos][data-balloon-pos=left]:before {
right: 100%;
top: 50%;
transform: translate(var(--balloon-move), -50%);
}
[aria-label][data-balloon-pos][data-balloon-pos=left]:after {
margin-right: 10px;
}
[aria-label][data-balloon-pos][data-balloon-pos=left]:before {
width: 0;
height: 0;
border: 5px solid transparent;
border-left-color: var(--balloon-color);
}
[aria-label][data-balloon-pos][data-balloon-pos=right]:after,
[aria-label][data-balloon-pos][data-balloon-pos=right]:before {
left: 100%;
top: 50%;
transform: translate(calc(var(--balloon-move) * -1), -50%);
}
[aria-label][data-balloon-pos][data-balloon-pos=right]:after {
margin-left: 10px;
}
[aria-label][data-balloon-pos][data-balloon-pos=right]:before {
width: 0;
height: 0;
border: 5px solid transparent;
border-right-color: var(--balloon-color);
}
[aria-label][data-balloon-pos][data-balloon-length]:after {
white-space: normal;
}
[aria-label][data-balloon-pos][data-balloon-length=small]:after {
width: 80px;
}
[aria-label][data-balloon-pos][data-balloon-length=medium]:after {
width: 150px;
}
[aria-label][data-balloon-pos][data-balloon-length=large]:after {
width: 260px;
}
[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after {
width: 380px;
}
@media screen and (max-width: 768px) {
[aria-label][data-balloon-pos][data-balloon-length=xlarge]:after {
width: 90vw;
}
}
[aria-label][data-balloon-pos][data-balloon-length=fit]:after {
width: 100%;
}
/* src/Components/Editor.css */
.shinylive-editor {
--bg-light-shade-color: #f6f6f6;
--button-gray-color: #999;
--button-hover-color: #hsl(207, 69%, 25%);
--border-color: #aaa;
--pad: 5px;
display: grid;
grid-template-rows: auto 1fr;
grid-template-areas: "header" "editor";
position: relative;
}
.ResizableGrid.editor-viewer:not(.been-dragged) > .shinylive-editor {
max-height: 800px;
}
.editor-header {
grid-area: header;
}
.editor-container {
grid-area: editor;
}
.shinylive-editor > div {
min-width: 0;
min-height: 0;
}
.editor-header {
display: flex;
padding-top: var(--pad);
padding-left: var(--pad);
padding-right: var(--pad);
justify-content: space-between;
align-items: flex-end;
border-bottom: 1px solid var(--border-color);
}
.editor-files > button {
font-size: 14px;
font-family: var(--font-face);
height: 26px;
background-color: var(--bg-light-shade-color);
color: #444;
border: 1px solid #ddd;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-bottom: none;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
padding: 0 2px;
}
.editor-files button svg {
vertical-align: unset;
}
.editor-filename {
padding: 0 4px;
}
.editor-files > button.selected {
color: black;
background-color: var(--colors-bg);
border-color: var(--border-color);
position: relative;
cursor: text;
}
.editor-files > button.selected::after {
content: "";
width: 100%;
height: 4px;
background-color: var(--colors-bg);
position: absolute;
bottom: -3px;
left: 0;
border-bottom-color: var(--colors-bg);
}
.editor-files > button.selected > input {
width: 100%;
font-size: 14px;
font-family: var(--font-face);
height: 26px;
position: absolute;
left: 4px;
bottom: -0.5px;
outline: none;
border: none;
color: var(--colors-blue);
background-color: transparent;
}
.editor-files > button.selected > input.invalid-filename {
color: var(--colors-red);
}
.editor-files > button > .editor-closebutton {
width: 1.2rem;
display: inline-block;
color: var(--button-gray-color);
font-weight: bold;
}
.editor-files > button.selected > .editor-closebutton + input {
width: calc(100% - 21px);
}
.editor-files > .editor-addtab {
border-color: rgba(0, 0, 0, 0);
display: inline-block;
line-height: 1rem;
margin-left: 0.5rem;
padding: 0;
}
.editor-files .editor-addbutton,
.editor-files .editor-uploadbutton {
display: inline-block;
color: var(--button-gray-color);
fill: var(--button-gray-color);
background-color: inherit;
font-size: 1.2rem;
font-weight: bold;
padding: 0 0.3rem;
}
.editor-files .editor-uploadbutton {
font-size: 0.7rem;
}
.editor-files .editor-closebutton:hover,
.editor-files .editor-addbutton:hover,
.editor-files .editor-uploadbutton:hover {
color: var(--button-hover-color);
fill: var(--button-hover-color);
cursor: pointer;
}
.editor-container {
padding: var(--pad);
position: relative;
}
.editor-container .cm-editor {
height: 100%;
}
.editor-container .cm-editor.cm-focused {
outline: none;
}
.editor-container .cm-editor .cm-scroller {
font-family: var(--font-mono-face);
font-size: var(--font-mono-size);
}
.editor-container .cm-gutters {
color: #aaa;
background-color: var(--colors-bg);
border-right: 1px solid #eee;
padding-right: 4px;
}
.editor-container .cm-activeLineGutter {
background-color: var(--colors-bg);
}
.editor-container .cm-tooltip {
font-family: var(--font-face);
font-size: var(--font-size);
}
.editor-container .cm-tooltip code {
font-family: var(--font-mono-face);
font-size: var(--font-mono-size);
white-space: pre-wrap;
}
.editor-container .cm-diagnostic {
font-family: var(--font-mono-face);
font-size: var(--font-mono-size);
}
.editor-container .cm-signature-signature {
font-family: var(--font-mono-face);
}
.editor-container .docstring {
padding: 3px 6px;
max-width: 650px;
max-height: 300px;
overflow-y: auto;
}
.editor-container .docstring pre {
white-space: pre-wrap;
}
.editor-container .docstring h2 {
font-size: 1.2em;
font-weight: 600;
}
.shinylive-editor button.code-run-button {
border: none;
font-size: 0.8rem;
padding: 0.2rem 0.5rem;
background-color: transparent;
white-space: nowrap;
}
.shinylive-editor .code-run-button:hover {
color: var(--button-hover-color);
fill: var(--button-hover-color);
}
.editor-header .code-run-button {
align-self: center;
color: var(--button-gray-color);
fill: var(--button-gray-color);
}
.shinylive-editor .floating-buttons .code-run-button {
position: absolute;
top: 0;
right: 0;
border: 0;
margin-top: 5px;
margin-right: 5px;
opacity: 0;
}
.shinylive-editor:hover .floating-buttons .code-run-button {
color: var(--button-gray-color);
fill: var(--button-gray-color);
opacity: 1;
}
.shinylive-editor .floating-buttons .code-run-button:hover {
color: var(--button-hover-color);
fill: var(--button-hover-color);
}
/* src/Components/Icons.css */
.shinylive-icon {
display: inline-block;
height: 1em;
}
/* src/Components/ShareModal.css */
.ShareModal {
position: absolute;
top: 50px;
left: 50px;
width: 600px;
font-family: var(--font-face);
background: white;
border: 1px solid #ccc;
border-radius: 5px;
padding: 8px 14px;
transition: 0.4s ease-out;
box-shadow: 0.5rem 0.5rem 2rem rgb(0 0 0 / 30%);
z-index: 10;
}
.ShareModal .ShareModal--item {
padding-bottom: 10px;
}
.ShareModal .ShareModal--item .ShareModal--checkbox {
margin-left: 1em;
font-size: 0.9em;
}
.ShareModal .ShareModal--row {
display: flex;
}
.ShareModal .ShareModal--row label {
display: flex;
align-items: center;
}
.ShareModal .ShareModal--row label span {
margin-left: 0.3em;
}
.ShareModal .ShareModal--row .ShareModal--url {
display: inline-flex;
position: relative;
vertical-align: top;
width: 100%;
}
.ShareModal .ShareModal--row .ShareModal--url .ShareModal--urlinput {
font-family: var(--font-mono-face);
font-size: var(--font-mono-size);
width: 100%;
margin-right: 12px;
}
.ShareModal-overlay {
opacity: 0.5;
background: #000;
width: 100%;
height: 100%;
z-index: 9;
top: 0;
left: 0;
position: fixed;
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -1,43 +0,0 @@
// Shinylive 0.2.3
// Copyright 2023 RStudio, PBC
// src/utils.ts
function dirname(path) {
if (path === "/" || path === "") {
return "";
}
return path.replace(/[/]?[^/]+[/]?$/, "");
}
function currentScriptPath() {
return new URL(import.meta.url).pathname;
}
function currentScriptDir() {
return dirname(currentScriptPath());
}
// src/load-shinylive-sw.ts
var localhostNames = ["localhost", "127.0.0.1", "[::1]"];
if (window.location.protocol !== "https:" && !localhostNames.includes(window.location.hostname)) {
const errorMessage = "Shinylive uses a Service Worker, which requires either a connection to localhost, or a connection via https.";
document.body.innerText = errorMessage;
throw Error(errorMessage);
}
var serviceWorkerDir;
var shinyliveMetaTag = document.querySelector(
'meta[name="shinylive:serviceworker_dir"]'
);
if (shinyliveMetaTag !== null) {
serviceWorkerDir = shinyliveMetaTag.content;
} else {
serviceWorkerDir = dirname(currentScriptDir());
}
serviceWorkerDir = serviceWorkerDir.replace(/\/$/, "");
var serviceWorkerPath = serviceWorkerDir + "/shinylive-sw.js";
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register(serviceWorkerPath, { type: "module" }).then(() => console.log("Service Worker registered")).catch(() => console.log("Service Worker registration failed"));
navigator.serviceWorker.ready.then(() => {
if (!navigator.serviceWorker.controller) {
window.location.reload();
}
});
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,71 +0,0 @@
/* Taken from https://www.joshwcomeau.com/css/custom-css-reset/ */
/*
1. Use a more-intuitive box-sizing model.
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
/*
2. Remove default margin
*/
* {
margin: 0;
}
/*
3. Allow percentage-based heights in the application
*/
html,
body {
height: 100%;
}
/*
Typographic tweaks!
4. Add accessible line-height
5. Improve text rendering
*/
body {
line-height: 1.5;
-webkit-font-smoothing: antialiased;
}
/*
6. Improve media defaults
*/
img,
picture,
video,
canvas,
svg {
display: block;
max-width: 100%;
}
/*
7. Remove built-in form typography styles
*/
input,
button,
textarea,
select {
font: inherit;
}
/*
8. Avoid text overflows
*/
p,
h1,
h2,
h3,
h4,
h5,
h6 {
overflow-wrap: break-word;
}
/*
9. Create a root stacking context
*/
#root,
#__next {
isolation: isolate;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -1 +0,0 @@
export {};

Binary file not shown.

Binary file not shown.

View file

@ -1,15 +0,0 @@
import { Readline } from 'xterm-readline';
import './App.css';
export interface TerminalInterface {
println: Readline['println'];
read: Readline['read'];
write: Readline['write'];
}
export interface FilesInterface {
refreshFilesystem: () => Promise<void>;
openFileInEditor: (name: string, path: string, readOnly: boolean) => Promise<void>;
}
export interface PlotInterface {
newPlot: () => void;
drawImage: (img: ImageBitmap) => void;
}

View file

@ -1,26 +0,0 @@
import React from 'react';
import { WebR } from '../../webR/webr-main';
import { EditorState } from '@codemirror/state';
import { FilesInterface, TerminalInterface } from '../App';
import './Editor.css';
export type EditorFile = {
name: string;
path: string;
ref: {
editorState: EditorState;
scrollTop?: number;
scrollLeft?: number;
};
};
export declare function FileTabs({ files, activeFileIdx, setActiveFileIdx, closeFile }: {
files: EditorFile[];
activeFileIdx: number;
setActiveFileIdx: React.Dispatch<React.SetStateAction<number>>;
closeFile: (e: React.SyntheticEvent, index: number) => void;
}): React.JSX.Element;
export declare function Editor({ webR, terminalInterface, filesInterface, }: {
webR: WebR;
terminalInterface: TerminalInterface;
filesInterface: FilesInterface;
}): React.JSX.Element;
export default Editor;

View file

@ -1,19 +0,0 @@
import React from 'react';
import { WebR } from '../../webR/webr-main';
import type { FSNode } from '../../webR/webr-main';
import { FilesInterface } from '../App';
import './Files.css';
interface ITreeNode {
id: number;
name: string;
children?: ITreeNode[];
metadata?: {
[x: string]: string | number | null | undefined;
};
}
export declare function createTreeFromFSNode(fsNode: FSNode): ITreeNode;
export declare function Files({ webR, filesInterface, }: {
webR: WebR;
filesInterface: FilesInterface;
}): React.JSX.Element;
export default Files;

View file

@ -1,7 +0,0 @@
import React from 'react';
import './Plot.css';
import { PlotInterface } from '../App';
export declare function Plot({ plotInterface, }: {
plotInterface: PlotInterface;
}): React.JSX.Element;
export default Plot;

View file

@ -1,9 +0,0 @@
import React from 'react';
import { TerminalInterface } from '../App';
import { WebR } from '../../webR/webr-main';
import 'xterm/css/xterm.css';
export declare function Terminal({ webR, terminalInterface, }: {
webR: WebR;
terminalInterface: TerminalInterface;
}): React.JSX.Element;
export default Terminal;

View file

@ -1,11 +0,0 @@
import { Text } from '@codemirror/state';
import { EditorView } from '@codemirror/view';
export type CursorPosition = {
line: number;
col: number;
};
export declare function offsetToPosition(cmDoc: Text, offset: number): CursorPosition;
export declare function positionToOffset(cmDoc: Text, pos: CursorPosition): number;
export declare function getSelectedText(cmView: EditorView): string;
export declare function getCurrentLineText(cmView: EditorView): string;
export declare function moveCursorToNextLine(cmView: EditorView): void;

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1 +0,0 @@
export {};

View file

@ -1,42 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/usr/share/fonts</dir>
<dir>/home/web_user/fonts</dir>
<cachedir>/var/cache/fontconfig</cachedir>
<alias>
<family>Helvetica</family>
<prefer><family>sans-serif</family></prefer>
</alias>
<alias>
<family>Times</family>
<prefer><family>serif</family></prefer>
</alias>
<alias>
<family>Courier</family>
<prefer><family>monospace</family></prefer>
</alias>
<alias>
<family>sans</family>
<prefer><family>sans-serif</family></prefer>
</alias>
<alias>
<family>mono</family>
<prefer><family>monospace</family></prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer><family>Noto Sans</family></prefer>
</alias>
<alias>
<family>serif</family>
<prefer><family>Noto Serif</family></prefer>
</alias>
<alias>
<family>monospace</family>
<prefer><family>Noto Sans Mono</family></prefer>
</alias>
</fontconfig>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,376 +0,0 @@
##================================================================##
### In longer simulations, aka computer experiments, ###
### you may want to ###
### 1) catch all errors and warnings (and continue) ###
### 2) store the error or warning messages ###
### ###
### Here's a solution (see R-help mailing list, Dec 9, 2010): ###
##================================================================##
##' Catch *and* save both errors and warnings, and in the case of
##' a warning, also keep the computed result.
##'
##' @title tryCatch both warnings (with value) and errors
##' @param expr an \R expression to evaluate
##' @return a list with 'value' and 'warning', where
##' 'value' may be an error caught.
##' @author Martin Maechler;
##' Copyright (C) 2010-2023 The R Core Team
tryCatch.W.E <- function(expr)
{
W <- NULL
w.handler <- function(w) { # warning handler
W <<- w
invokeRestart("muffleWarning")
}
list(value = withCallingHandlers(tryCatch(expr, error = function(e) e),
warning = w.handler),
warning = W)
}
str( tryCatch.W.E( log( 2 ) ) )
str( tryCatch.W.E( log( -1) ) )
str( tryCatch.W.E( log("a") ) )
##' @title Catch *all* warnings and the value
##' @param expr an \R expression to evaluate
##' @return a list with 'value' and 'warnings'
##' @author Luke Tierney (2004), R-help post
##' https://stat.ethz.ch/pipermail/r-help/2004-June/052132.html
withWarnings <- function(expr) {
W <- NULL
wHandler <- function(w) {
W <<- c(W, list(w))
invokeRestart("muffleWarning")
}
val <- withCallingHandlers(expr, warning = wHandler)
list(value = val, warnings = W)
}
withWarnings({ warning("first"); warning("2nd"); pi })
r <- withWarnings({ log(-1) + sqrt(-4); exp(1) })
str(r, digits=14)
##' @title tryCatch *all* warnings and messages, and an error or the final value
##' @param expr an \R expression to evaluate
##' @return a list with `messages`, `warnings`, and
##' `value` which may be an error caught.
##' @author Martin Maechler (combining the above)
tryCatch_WEMs <- function(expr)
{
W <- M <- NULL
w.handler <- function(w) { # warning handler
W <<- c(W, list(w)); invokeRestart("muffleWarning")
}
m.handler <- function(m) { # message handler
M <<- c(M, list(m)); invokeRestart("muffleMessage")
}
list(value = withCallingHandlers(tryCatch(expr, error = function(e) e),
warning = w.handler, message = m.handler),
messages = M,
warnings = W)
}
f3 <- function(x) {
r <- log(-x) + sqrt(-x) # produce warnings when x >= 0
if(anyNA(r)) message(sprintf("%d NA's produced by log(.) + sqrt(.)", sum(is.na(r))))
r <- exp(-x)
if(any(ii <- is.infinite(r))) message(sprintf("Got +/- Inf from x[%s]", deparse(which(ii))))
r
}
str( r0 <- tryCatch_WEMs(f3("A")) ) # just an error from '-x'
stopifnot(exprs = {
inherits (r0$value, "error")
identical(r0$value$call, quote(-x))
sapply(r0[c("messages","warnings")], is.null)
})
(x <- c(-1:1, (-1:1)/0))
str( rI <- tryCatch_WEMs(f3(x) ))
stopifnot(exprs = {
identical(lengths(rI), c(value = length(x), messages = 2L, warnings = 2L))
rI$value[4] == Inf
all.equal(rI$value, exp(-x))
length(rI$messages) == 2; sapply(rI$messages, inherits, what="message")
length(rI$warnings) == 2; sapply(rI$warnings, inherits, what="warning")
})
# Copyright (C) 1997-2018 The R Core Team
### The Base package has a couple of non-functions:
##
## These may be in "base" when they exist; discount them here
## (see also 'dont.mind' in checkConflicts() inside library()) :
xtraBaseNms <- c("last.dump", "last.warning", ".Last.value",
".Random.seed", ".Traceback")
ls.base <- Filter(function(nm) is.na(match(nm, xtraBaseNms)),
ls("package:base", all=TRUE))
base.is.f <- sapply(ls.base, function(x) is.function(get(x)))
cat("\nNumber of all base objects:\t", length(ls.base),
"\nNumber of functions from these:\t", sum(base.is.f),
"\n\t starting with 'is.' :\t ",
sum(grepl("^is\\.", ls.base[base.is.f])), "\n", sep = "")
## R ver.| #{is*()}
## ------+---------
## 0.14 : 31
## 0.50 : 33
## 0.60 : 34
## 0.63 : 37
## 1.0.0 : 38
## 1.3.0 : 41
## 1.6.0 : 45
## 2.0.0 : 45
## 2.7.0 : 48
## 3.0.0 : 49
if(interactive()) {
nonDots <- function(nm) substr(nm, 1L, 1L) != "."
cat("Base non-functions not starting with \".\":\n")
Filter(nonDots, ls.base[!base.is.f])
}
## Do we have a method (probably)?
is.method <- function(fname) {
isFun <- function(name) (exists(name, mode="function") &&
is.na(match(name, c("is", "as"))))
np <- length(sp <- strsplit(fname, split = "\\.")[[1]])
if(np <= 1 )
FALSE
else
(isFun(paste(sp[1:(np-1)], collapse = '.')) ||
(np >= 3 &&
isFun(paste(sp[1:(np-2)], collapse = '.'))))
}
is.ALL <- function(obj, func.names = ls(pos=length(search())),
not.using = c("is.single", "is.real", "is.loaded",
"is.empty.model", "is.R", "is.element", "is.unsorted"),
true.only = FALSE, debug = FALSE)
{
## Purpose: show many 'attributes' of R object __obj__
## -------------------------------------------------------------------------
## Arguments: obj: any R object
## -------------------------------------------------------------------------
## Author: Martin Maechler, Date: 6 Dec 1996
is.fn <- func.names[substring(func.names,1,3) == "is."]
is.fn <- is.fn[substring(is.fn,1,7) != "is.na<-"]
use.fn <- is.fn[ is.na(match(is.fn, not.using))
& ! sapply(is.fn, is.method) ]
r <- if(true.only) character(0)
else structure(vector("list", length= length(use.fn)), names= use.fn)
for(f in use.fn) {
if(any(f == c("is.na", "is.finite"))) {
if(!is.list(obj) && !is.vector(obj) && !is.array(obj)) {
if(!true.only) r[[f]] <- NA
next
}
}
if(any(f == c("is.nan", "is.finite", "is.infinite"))) {
if(!is.atomic(obj)) {
if(!true.only) r[[f]] <- NA
next
}
}
if(debug) cat(f,"")
fn <- get(f)
rr <- if(is.primitive(fn) || length(formals(fn))>0) fn(obj) else fn()
if(!is.logical(rr)) cat("f=",f," --- rr is NOT logical = ",rr,"\n")
##if(1!=length(rr)) cat("f=",f," --- rr NOT of length 1; = ",rr,"\n")
if(true.only && length(rr)==1 && !is.na(rr) && rr) r <- c(r, f)
else if(!true.only) r[[f]] <- rr
}
if(debug)cat("\n")
if(is.list(r)) structure(r, class = "isList") else r
}
print.isList <- function(x, ..., verbose = getOption("verbose"))
{
## Purpose: print METHOD for `isList' objects
## ------------------------------------------------
## Author: Martin Maechler, Date: 12 Mar 1997
if(is.list(x)) {
if(verbose) cat("print.isList(): list case (length=",length(x),")\n")
nm <- format(names(x))
rr <- lapply(x, stats::symnum, na = "NA")
for(i in seq_along(x)) cat(nm[i],":",rr[[i]],"\n", ...)
} else NextMethod("print", ...)
}
is.ALL(NULL)
##fails: is.ALL(NULL, not.using = c("is.single", "is.loaded"))
is.ALL(NULL, true.only = TRUE)
all.equal(NULL, pairlist())
## list() != NULL == pairlist() :
is.ALL(list(), true.only = TRUE)
(pl <- is.ALL(pairlist(1, list(3,"A")), true.only = TRUE))
(ll <- is.ALL( list(1,pairlist(3,"A")), true.only = TRUE))
all.equal(pl[pl != "is.pairlist"],
ll[ll != "is.vector"])## TRUE
is.ALL(1:5)
is.ALL(array(1:24, 2:4))
is.ALL(1 + 3)
e13 <- expression(1 + 3)
is.ALL(e13)
is.ALL(substitute(expression(a + 3), list(a=1)), true.only = TRUE)
is.ALL(y ~ x) #--> NA for is.na & is.finite
is0 <- is.ALL(numeric(0))
is0.ok <- 1 == (lis0 <- sapply(is0, length))
is0[!is0.ok]
is0 <- unlist(is0)
is0
ispi <- unlist(is.ALL(pi))
all(ispi[is0.ok] == is0)
is.ALL(numeric(0), true=TRUE)
is.ALL(array(1,1:3), true=TRUE)
is.ALL(cbind(1:3), true=TRUE)
is.ALL(structure(1:7, names = paste("a",1:7,sep="")))
is.ALL(structure(1:7, names = paste("a",1:7,sep="")), true.only = TRUE)
x <- 1:20 ; y <- 5 + 6*x + rnorm(20)
lm.xy <- lm(y ~ x)
is.ALL(lm.xy)
is.ALL(structure(1:7, names = paste("a",1:7,sep="")))
is.ALL(structure(1:7, names = paste("a",1:7,sep="")), true.only = TRUE)
# Copyright (C) 1997-2005 The R Core Team
## Adaptive integration: Venables and Ripley pp. 105-110
## This is the basic integrator.
area <- function(f, a, b, ..., fa = f(a, ...), fb = f(b, ...), limit
= 10, eps = 1.e-5)
{
h <- b - a
d <- (a + b)/2
fd <- f(d, ...)
a1 <- ((fa + fb) * h)/2
a2 <- ((fa + 4 * fd + fb) * h)/6
if(abs(a1 - a2) < eps)
return(a2)
if(limit == 0) {
warning(paste("iteration limit reached near x = ",
d))
return(a2)
}
area(f, a, d, ..., fa = fa, fb = fd, limit = limit - 1,
eps = eps) + area(f, d, b, ..., fa = fd, fb =
fb, limit = limit - 1, eps = eps)
}
## The function to be integrated
fbeta <- function(x, alpha, beta)
{
x^(alpha - 1) * (1 - x)^(beta - 1)
}
## Compute the approximate integral, the exact integral and the error
b0 <- area(fbeta, 0, 1, alpha=3.5, beta=1.5)
b1 <- exp(lgamma(3.5) + lgamma(1.5) - lgamma(5))
c(b0, b1, b0-b1)
## Modify the function so that it records where it was evaluated
fbeta.tmp <- function (x, alpha, beta)
{
val <<- c(val, x)
x^(alpha - 1) * (1 - x)^(beta - 1)
}
## Recompute and plot the evaluation points.
val <- NULL
b0 <- area(fbeta.tmp, 0, 1, alpha=3.5, beta=1.5)
plot(val, fbeta(val, 3.5, 1.5), pch=0)
## Better programming style -- renaming the function will have no effect.
## The use of "Recall" as in V+R is VERY black magic. You can get the
## same effect transparently by supplying a wrapper function.
## This is the approved Abelson+Sussman method.
area <- function(f, a, b, ..., limit=10, eps=1e-5) {
area2 <- function(f, a, b, ..., fa = f(a, ...), fb = f(b, ...),
limit = limit, eps = eps) {
h <- b - a
d <- (a + b)/2
fd <- f(d, ...)
a1 <- ((fa + fb) * h)/2
a2 <- ((fa + 4 * fd + fb) * h)/6
if(abs(a1 - a2) < eps)
return(a2)
if(limit == 0) {
warning(paste("iteration limit reached near x =", d))
return(a2)
}
area2(f, a, d, ..., fa = fa, fb = fd, limit = limit - 1,
eps = eps) + area2(f, d, b, ..., fa = fd, fb =
fb, limit = limit - 1, eps = eps)
}
area2(f, a, b, ..., limit=limit, eps=eps)
}
## Here is a little example which shows a fundamental difference between
## R and S. It is a little example from Abelson and Sussman which models
## the way in which bank accounts work. It shows how R functions can
## encapsulate state information.
##
## When invoked, "open.account" defines and returns three functions
## in a list. Because the variable "total" exists in the environment
## where these functions are defined they have access to its value.
## This is even true when "open.account" has returned. The only way
## to access the value of "total" is through the accessor functions
## withdraw, deposit and balance. Separate accounts maintain their
## own balances.
##
## This is a very nifty way of creating "closures" and a little thought
## will show you that there are many ways of using this in statistics.
# Copyright (C) 1997-8 The R Core Team
open.account <- function(total) {
list(
deposit = function(amount) {
if(amount <= 0)
stop("Deposits must be positive!\n")
total <<- total + amount
cat(amount,"deposited. Your balance is", total, "\n\n")
},
withdraw = function(amount) {
if(amount > total)
stop("You don't have that much money!\n")
total <<- total - amount
cat(amount,"withdrawn. Your balance is", total, "\n\n")
},
balance = function() {
cat("Your balance is", total, "\n\n")
}
)
}
ross <- open.account(100)
robert <- open.account(200)
ross$withdraw(30)
ross$balance()
robert$balance()
ross$deposit(50)
ross$balance()
try(ross$withdraw(500)) # no way..

View file

@ -1 +0,0 @@
{"files":[{"filename":"/error.catching.R","start":0,"end":3367},{"filename":"/is.things.R","start":3367,"end":8165},{"filename":"/recursion.R","start":8165,"end":10280},{"filename":"/scoping.R","start":10280,"end":11840}],"remote_package_size":11840}

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
{"files":[{"filename":"/AnIndex","start":0,"end":35462},{"filename":"/aliases.rds","start":35462,"end":48080},{"filename":"/base.rdb","start":48080,"end":2366742},{"filename":"/base.rdx","start":2366742,"end":2375985},{"filename":"/paths.rds","start":2375985,"end":2379177}],"remote_package_size":2379177}

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
{"files":[{"filename":"/00Index.html","start":0,"end":151052},{"filename":"/R.css","start":151052,"end":152896}],"remote_package_size":152896}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/AnIndex","start":0,"end":174},{"filename":"/aliases.rds","start":174,"end":377},{"filename":"/compiler.rdb","start":377,"end":9101},{"filename":"/compiler.rdx","start":9101,"end":9267},{"filename":"/paths.rds","start":9267,"end":9407}],"remote_package_size":9407}

View file

@ -1,173 +0,0 @@
<!DOCTYPE html>
<html>
<head><title>R: The R Compiler Package</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel="stylesheet" type="text/css" href="R.css" />
</head><body><div class="container">
<h1> The R Compiler Package
<img class="toplogo" src="../../../doc/html/Rlogo.svg" alt="[R logo]" />
</h1>
<hr/>
<div style="text-align: center;">
<a href="../../../doc/html/packages.html"><img class="arrow" src="../../../doc/html/left.jpg" alt="[Up]" /></a>
<a href="../../../doc/html/index.html"><img class="arrow" src="../../../doc/html/up.jpg" alt="[Top]" /></a>
</div><h2>Documentation for package &lsquo;compiler&rsquo; version 4.3.0</h2>
<ul><li><a href="../DESCRIPTION">DESCRIPTION file</a>.</li>
</ul>
<h2>Help Pages</h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="compile.html">cmpfile</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">cmpfun</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">compile</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">compilePKGS</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">disassemble</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">enableJIT</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">getCompilerOption</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">loadcmp</a></td>
<td>Byte Code Compiler</td></tr>
<tr><td style="width: 25%;"><a href="compile.html">setCompilerOptions</a></td>
<td>Byte Code Compiler</td></tr>
</table>
</div></body></html>
@media screen {
.container {
padding-right: 10px;
padding-left: 10px;
margin-right: auto;
margin-left: auto;
max-width: 900px;
}
}
.rimage img { /* from knitr - for examples and demos */
width: 96%;
margin-left: 2%;
}
.katex { font-size: 1.1em; }
code {
color: inherit;
background: inherit;
}
body {
line-height: 1.4;
background: white;
color: black;
}
a:link {
background: white;
color: blue;
}
a:visited {
background: white;
color: rgb(50%, 0%, 50%);
}
h1 {
background: white;
color: rgb(55%, 55%, 55%);
font-family: monospace;
font-size: 1.4em; /* x-large; */
text-align: center;
}
h2 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
text-align: center;
}
h3 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
}
h4 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
font-size: 1.2em; /* large; */
}
h5 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
}
h6 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
}
img.toplogo {
width: 4em;
vertical-align: middle;
}
img.arrow {
width: 30px;
height: 30px;
border: 0;
}
span.acronym {
font-size: small;
}
span.env {
font-family: monospace;
}
span.file {
font-family: monospace;
}
span.option{
font-family: monospace;
}
span.pkg {
font-weight: bold;
}
span.samp{
font-family: monospace;
}
div.vignettes a:hover {
background: rgb(85%, 85%, 85%);
}
tr {
vertical-align: top;
}
span.rlang {
font-family: Courier New, Courier;
color: #666666;
}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/00Index.html","start":0,"end":1857},{"filename":"/R.css","start":1857,"end":3701}],"remote_package_size":3701}

View file

@ -1,845 +0,0 @@
##
## Assignment tests
##
library(compiler)
## Local assignment
### symbol
x <- 1
eval(compile(quote(x <- 2)))
stopifnot(x == 2)
### closure
`f<-` <- function(x, i, value) { x[i] <- value; x }
x <- 1
eval(compile(quote(f(x, 1) <- 2)))
stopifnot(x == 2)
### SPECIAL
`f<-` <- `[<-`
x <- 1
eval(compile(quote(f(x, 1) <- 2)))
stopifnot(x == 2)
### BUILTIN
`f<-` <- `names<-`
x <- 1
eval(compile(quote(f(x) <- "foo")))
stopifnot(identical(x, structure(1, names = "foo")))
## Super assignment
### symbol
x <- 1
eval(compile(quote((function() x <<- 2)())))
stopifnot(x == 2)
### closure
`f<-` <- function(x, i, value) { x[i] <- value; x }
x <- 1
eval(compile(quote((function() f(x, 1) <<- 2)())))
stopifnot(x == 2)
### SPECIAL
`f<-` <- `[<-`
x <- 1
eval(compile(quote((function() f(x, 1) <<- 2)())))
stopifnot(x == 2)
### BUILTIN
`f<-` <- `names<-`
x <- 1
eval(compile(quote((function() f(x) <<- "foo")())))
stopifnot(identical(x, structure(1, names = "foo")))
## Dollargets
### Default
x <- list(a = 1)
eval(compile(quote(x$a <- 2)))
stopifnot(identical(x, list(a = 2)))
### Dispatch
x <- structure(list(a = 1), class = "foo")
y <- NULL
`$<-.foo` <- function(x, tag, value) { y <<- list(tag, value); x }
eval(compile(quote(x$a <- 2)))
stopifnot(identical(y, list("a", 2)))
## Subassign
### Default
x <- 1
eval(compile(quote(x[1] <- 2)))
stopifnot(identical(x, 2))
### Dispatching
x <- structure(list(NULL), class = "foo")
y <- NULL
`[<-.foo` <- function(x, k, value) { y <<- rep(value, k); x }
eval(compile(quote(x[2] <- 3)))
stopifnot(identical(y, rep(3, 2)))
#### Missing args
x <- c(1, 2, 3)
eval(compile(quote(x[] <- c(4, 5, 6))))
stopifnot(identical(x, c(4, 5, 6)))
### Named args
x <- structure(list(NULL), class = "foo")
y <- NULL
`[<-.foo` <- function(x, k, value) { y <<- names(sys.call()[-1]); x }
eval(compile(quote(x[k = 2] <- 3)))
stopifnot(identical(y, c("", "k", "value")))
## Subassign2
### Default
x <- list(NULL)
eval(compile(quote(x[[1]] <- list(1))))
stopifnot(identical(x, list(list(1))))
### Dispatching
x <- structure(list(), class = "foo")
y <- 1
`[[<-.foo` <- function(x, i, value) { y[i] <<- value; x }
eval(compile(quote(x[[1]] <- 3)))
stopifnot(identical(y, 3))
## Nested assignments
x <- list(a = list(b = 1))
eval(compile(quote(x$a$b <- 2)))
stopifnot(identical(x, list(a = list(b = 2))))
x <- list(1, list(2))
eval(compile(quote(x[[1]][] <- 2)))
eval(compile(quote(x[[2]][[1]] <- 3)))
stopifnot(identical(x, list(2, list(3))))
## checkAssign
checkAssign <- compiler:::checkAssign
cenv <- compiler:::makeCenv(.GlobalEnv)
cntxt <- compiler:::make.toplevelContext(cenv, list(suppressAll = TRUE))
stopifnot(identical(checkAssign(quote(x <- 1), cntxt), TRUE))
stopifnot(identical(checkAssign(quote("x" <- 1), cntxt), TRUE))
stopifnot(identical(checkAssign(quote(3 <- 1), cntxt), FALSE))
stopifnot(identical(checkAssign(quote(f(x) <- 1), cntxt), TRUE))
stopifnot(identical(checkAssign(quote((f())(x) <- 1), cntxt), FALSE))
stopifnot(identical(checkAssign(quote(f(g(x)) <- 1), cntxt), TRUE))
stopifnot(identical(checkAssign(quote(f(g("x")) <- 1), cntxt), FALSE))
## flattenPlace
flattenPlace <- compiler:::flattenPlace
stopifnot(identical(flattenPlace(quote(f(g(h(x, k), j), i)))$places,
list(quote(f(`*tmp*`, i)),
quote(g(`*tmp*`, j)),
quote(h(`*tmp*`, k)))))
stopifnot(identical(flattenPlace(quote(f(g(h(x, k), j), i)))$origplaces,
list(quote(f(g(h(x, k), j), i)),
quote(g(h(x, k), j)),
quote(h(x, k)))))
## getAssignFun
getAssignFun <- compiler:::getAssignFun
stopifnot(identical(getAssignFun(quote(f)), quote(`f<-`)))
stopifnot(identical(getAssignFun("f"), NULL))
stopifnot(identical(getAssignFun(quote(f(x))), NULL))
stopifnot(identical(getAssignFun(quote(base::diag)), quote(base::`diag<-`)))
stopifnot(identical(getAssignFun(quote(base:::diag)), quote(base:::`diag<-`)))
library(compiler)
options(keep.source=TRUE)
## very minimal
x <- 2
stopifnot(eval(compile(quote(x + 1))) == 3)
## simple code generation
checkCode <- function(expr, code, optimize = 2) {
v <- compile(expr, options = list(optimize = optimize))
d <- .Internal(disassemble(v))[[2]][-1]
dd <- as.integer(eval(substitute(code), getNamespace("compiler")))
identical(d, dd)
}
x <- 2
stopifnot(checkCode(quote(x + 1),
c(GETVAR.OP, 1L,
LDCONST.OP, 2L,
ADD.OP, 0L,
RETURN.OP)))
f <- function(x) x
checkCode(quote({f(1); f(2)}),
c(GETFUN.OP, 1L,
PUSHCONSTARG.OP, 3L,
CALL.OP, 4L,
POP.OP,
GETFUN.OP, 1L,
PUSHCONSTARG.OP, 6L,
CALL.OP, 7L,
RETURN.OP))
## names and ... args
f <- function(...) list(...)
stopifnot(identical(f(1, 2), cmpfun(f)(1, 2)))
f <- function(...) list(x = ...)
stopifnot(identical(f(1, 2), cmpfun(f)(1, 2)))
## substitute and argument constant folding
f <- function(x) substitute(x)
g <- function() f(1 + 2)
v1 <- g()
f <- cmpfun(f)
g <- cmpfun(g)
v2 <- g()
stopifnot(identical(v1, v2))
## simple loops
sr <- function(x) {
n <- length(x)
i <- 1
s <- 0
repeat {
if (i > n) break
s <- s + x[i]
i <- i + 1
}
s
}
sw <- function(x) {
n <- length(x)
i <- 1
s <- 0
while (i <= n) {
s <- s + x[i]
i <- i + 1
}
s
}
sf <- function(x) {
s <- 0
for (y in x)
s <- s + y
s
}
src <- cmpfun(sr)
swc <- cmpfun(sw)
sfc <- cmpfun(sf)
x <- 1 : 5
stopifnot(src(x) == sr(x))
stopifnot(swc(x) == sw(x))
stopifnot(sfc(x) == sf(x))
## Check that the handlers have been associated with the correct package
h <- ls(compiler:::inlineHandlers, all.names = TRUE)
p <- sub("package:", "", sapply(h, find))
pp <- sapply(h, function(n) get(n, compiler:::inlineHandlers)$package)
# stopifnot(identical(p, pp))
## Check assumption about simple .Internals
## These are .External calls now.
## stopifnot(all(sapply(compiler:::safeStatsInternals,
## function(f)
## compiler:::is.simpleInternal(get(f, "package:stats")))))
stopifnot(all(sapply(compiler:::safeBaseInternals,
function(f)
compiler:::is.simpleInternal(get(f, "package:base")))))
library(compiler)
##
## Test code for constant folding
##
makeCenv <- compiler:::makeCenv
checkConst <- compiler:::checkConst
constantFoldSym <- compiler:::constantFoldSym
constantFold <- compiler:::constantFold
## using a global environment
ce <- makeCenv(.GlobalEnv)
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 3)),
checkConst(base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 2)),
NULL))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 1)),
NULL))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 0)),
NULL))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 3, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 2, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 1, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 0, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 3, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 2, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 1, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 0, env = ce)),
NULL))
## using a namespace environment
ce <- makeCenv(getNamespace("stats"))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 3)),
list(value = base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 2)),
list(value = base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 1)),
checkConst(base::pi)))
stopifnot(identical(constantFoldSym(quote(pi), list(env = ce, optimize = 0)),
NULL))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 3, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 2, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 1, env = ce)),
checkConst(1 + 2)))
stopifnot(identical(constantFold(quote(1 + 2), list(optimize = 0, env = ce)),
NULL))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 3, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 2, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 1, env = ce)),
checkConst(sqrt(2))))
stopifnot(identical(constantFold(quote(sqrt(2)), list(optimize = 0, env = ce)),
NULL))
library(compiler)
# set to TRUE for debugging
only.print <- FALSE
testError <- function(expr, handler) {
err <- tryCatch(expr, error = handler)
stopifnot(identical(err, TRUE))
}
testWarning <- function(expr, handler) {
warn <- tryCatch(expr, warning = handler)
stopifnot(identical(warn, TRUE))
}
w <- function(expr, call = substitute(expr)) {
if (only.print)
testWarning(expr = expr, handler = function(e) {
cat("WARNING-MESSAGE: \"", e$message, "\"\nWARNING-CALL: ", deparse(e$call), "\n", sep="")
TRUE
})
else
testWarning(expr = expr, handler = function(e) {
stopifnot(identical(e$call, call))
TRUE
})
}
e <- function(expr, call = substitute(expr)) {
if (only.print)
testError(expr = expr, handler = function(e) {
cat("ERROR-MESSAGE: \"", e$message, "\"\nERROR-CALL: ", deparse(e$call), "\n", sep="")
TRUE
})
else
testError(expr = expr, handler = function(e) {
stopifnot(identical(e$call, call))
TRUE
})
}
f <- function(x = 1:2,
y = -1,
z = c(a=1, b=2, c=2, d=3),
u = list(inner = c(a=1,b=2,c=3,d=4)),
v = list(),
...) {
w(x[1:3] <- 11:12)
# quote(`[<-`(x, 1:3, value = 11:12))
w(min(...))
w(sqrt(y))
e(names(z[1:2]) <- c("X", "Y", "Z"))
# quote(`names<-`(z[1:2], value = c("X", "Y", "Z"))
e(names(z[c(-1,1)]) <- c("X", "Y", "Z"),
# quote(z[c(-1, 1)])) <=== this would be nice, but not possible at the moment
quote(`*tmp*`[c(-1, 1)]))
w(names(u$inner)[2:4] <- v[1:2] <- c("X", "Y", "Z", "U")[1:2])
# quote(`[<-`(names(u$inner), 2:4, value = v[1:2] <- c("X", "Y", "Z", "U")[1:2]))
##_ Not anymore, as stopifnot() massages its error/warning message:
##_ e(stopifnot(is.numeric(dummy)))
}
old=options()
oldoptimize <- getCompilerOption("optimize")
oldjit <- enableJIT(3)
for (opt in 2:3) {
setCompilerOptions(optimize=opt)
f()
}
## test that AST and compiler errors/warnings agree
enableJIT(0)
testexpr <- function(fun) {
resast <- tryCatch(fun(), error = function(e) e, warning = function(e) e)
cfun <- cmpfun(fun)
rescmp <- tryCatch(cfun(), error = function(e) e, warning = function(e) e)
show(resast)
show(rescmp)
stopifnot(identical(resast, rescmp))
}
testexpr(function() { dummy()$e })
testexpr(function() { beta(-1, NULL) })
testexpr(function() { inherits(1, log) })
enableJIT(oldjit)
setCompilerOptions(optimize = oldoptimize)
library(compiler)
##
## Tests for findHomeNS()
##
findHomeNS <- compiler:::findHomeNS
## return value for an undefinded variable should be NULL
stopifnot(is.null(findHomeNS("foo", getNamespace("stats"))))
stopifnot(is.null(findHomeNS("foo", parent.env(getNamespace("stats")))))
stopifnot(is.null(findHomeNS("foo", getNamespace("base"))))
## + is found in .BaseNamespaceEnv for stats or base
stopifnot(identical(findHomeNS("+", getNamespace("stats")),
.BaseNamespaceEnv))
stopifnot(identical(findHomeNS("+", parent.env(getNamespace("stats"))),
.BaseNamespaceEnv))
stopifnot(identical(findHomeNS("+", getNamespace("base")),
.BaseNamespaceEnv))
## dnorm is defined in stats
stopifnot(identical(findHomeNS("dnorm", getNamespace("stats")),
getNamespace("stats")))
stopifnot(identical(findHomeNS("dnorm", parent.env(getNamespace("stats"))),
getNamespace("stats")))
stopifnot(is.null(findHomeNS("dnorm", getNamespace("base"))))
## par is available via the stats namespace since stats imports graphics
stopifnot(identical(findHomeNS("par", getNamespace("stats")),
getNamespace("graphics")))
stopifnot(identical(findHomeNS("par", parent.env(getNamespace("stats"))),
getNamespace("graphics")))
stopifnot(is.null(findHomeNS("par", getNamespace("base"))))
## palette is one of a small set of selective imports from grDevices
stopifnot(identical(findHomeNS("palette", getNamespace("stats")),
getNamespace("grDevices")))
stopifnot(identical(findHomeNS("palette", parent.env(getNamespace("stats"))),
getNamespace("grDevices")))
stopifnot(is.null(findHomeNS("palette", getNamespace("base"))))
##
## Tests for getAssignedVar
##
getAssignedVar <- compiler:::getAssignedVar
stopifnot(identical(getAssignedVar(quote("v"<-x)), "v"))
stopifnot(identical(getAssignedVar(quote(v<-x)), "v"))
stopifnot(identical(getAssignedVar(quote(f(v)<-x)), "v"))
stopifnot(identical(getAssignedVar(quote(f(g(v,2),1)<-x)), "v"))
##
## Tests for findLocals
##
findLocals <- compiler:::findLocals
cenv <- compiler:::makeCenv(.GlobalEnv)
cntxt <- compiler:::make.toplevelContext(cenv, NULL)
stopifnot(identical(findLocals(quote(x<-1), cntxt), "x"))
stopifnot(identical(findLocals(quote(f(x)<-1), cntxt), "x"))
stopifnot(identical(findLocals(quote(f(g(x,2),1)<-1), cntxt), "x"))
stopifnot(identical(findLocals(quote(x<-y<-1), cntxt), c("x","y")))
stopifnot(identical(findLocals(quote(local(x<-1,e)), cntxt), "x"))
stopifnot(identical(findLocals(quote(local(x<-1)), cntxt), character(0)))
stopifnot(identical(findLocals(quote({local<-1;local(x<-1)}), cntxt),
c("local", "x")))
local({
f <- function (f, x, y) {
local <- f
local(x <- y)
x
}
stopifnot(identical(findLocals(body(f), cntxt), c("local","x")))
})
local({
cenv <- compiler:::addCenvVars(cenv, "local")
cntxt <- compiler:::make.toplevelContext(cenv, NULL)
stopifnot(identical(findLocals(quote(local(x<-1,e)), cntxt), "x"))
})
stopifnot(identical(findLocals(quote(assign(x, 3)), cntxt), character(0)))
stopifnot(identical(findLocals(quote(assign("x", 3)), cntxt), "x"))
stopifnot(identical(findLocals(quote(assign("x", 3, 4)), cntxt), character(0)))
library(compiler)
oldJIT <- enableJIT(3)
## need a test of level 1 to make sure functions are compiled
## need more tests here
repeat { break }
while(TRUE) break
for (i in 1:10) i
enableJIT(oldJIT)
library(compiler)
f <- function(x) x
g <- function(x) repeat if (x) f(return(1)) else return(2)
gc <- cmpfun(g)
stopifnot(identical(g(TRUE), gc(TRUE)))
stopifnot(identical(g(FALSE), gc(FALSE)))
h <- function(x) { repeat if (x) f(return(1)) else break; 2 }
hc <- cmpfun(h)
stopifnot(identical(h(TRUE), hc(TRUE)))
stopifnot(identical(h(FALSE), hc(FALSE)))
k <- function(x) { repeat if (x) return(1) else f(break); 2 }
kc <- cmpfun(k)
stopifnot(identical(k(TRUE), kc(TRUE)))
stopifnot(identical(k(FALSE), kc(FALSE)))
## **** need more variations on this.
## this would give an error prior to fixing a binding cache bug
f <- function(x) { for (y in x) { z <- y; g(break) } ; z }
g <- function(x) x
cmpfun(f)(c(1,2,3))
library(compiler)
# This tests tracking of source file references
options(keep.source=TRUE)
ln <- function() attr(sys.call(), "srcref")[1]
# NOTE: the block below is sensitive to formatting (newlines)
code <- quote({
start <- ln()
plus1 <- ln() # start + 1
stopifnot(identical(plus1, start+1L))
{
plus4 <- ln() # start + 4
}
stopifnot(identical(plus4, start+4L))
plus9 <- 0
f <- function() {
plus9 <<- ln() # start + 9
}
f()
stopifnot(identical(plus9, start+9L))
g <- function(x = ln()) x # start + 13
plus13 <- g()
stopifnot(identical(plus13, start+13L))
plus16 <- g(ln()) # start + 16
stopifnot(identical(plus16, start+13L) || identical(plus16, start+16L)) ### NOTE: see compatibility note below
for(i in 1) plus18 <- ln() # start + 18
stopifnot(identical(plus18, start+18L))
for(i in 1) { plus20 <- ln() } # start + 20
stopifnot(identical(plus20, start+20L))
for(i in 1) {
plus23 <- ln() # start + 23
}
stopifnot(identical(plus23, start+23L))
ff <- function() for(i in 1) return(ln()) # start + 26
plus26 <- ff()
stopifnot(identical(plus26, start+26L))
ff1 <- function() {
for(i in 1) return(ln()) # start + 30
}
plus30 <- ff1()
stopifnot(identical(plus30, start+30L))
})
## Compatibility note
##
## in the example above, "plus16" with the AST interpreter gets line number
## start+13, but with the compiler, it gets start+16. The latter seems to
## be more correct, as line start+16 is where the spelling of "ln()" is.
oldoptimize <- getCompilerOption("optimize")
oldjit <- enableJIT(0)
l <- function() 1
body(l) <- code
for(jit in 0:2) {
enableJIT(jit)
for (opt in 0:3) {
if (opt >=2 || jit <=2) {
setCompilerOptions(optimize=opt)
eval(code)
eval(compile(code))
body(l) <- code
l()
body(l) <- code
cmpfun(l)()
local(eval(code))
do.call("local", list(code))
}
}
}
setCompilerOptions(optimize = oldoptimize)
enableJIT(oldjit)
library(compiler)
ev <- function(expr)
tryCatch(withVisible(eval(expr, parent.frame(), baseenv())),
error = function(e) conditionMessage(e))
f <- function(x) switch(x, x = 1, y = , z = 3, , w =, 6, v = )
fc <- cmpfun(f)
stopifnot(identical(ev(quote(fc("x"))), ev(quote(f("x")))))
stopifnot(identical(ev(quote(fc("A"))), ev(quote(f("A")))))
stopifnot(identical(ev(quote(fc(0))), ev(quote(f(0)))))
stopifnot(identical(ev(quote(fc(1))), ev(quote(f(1)))))
stopifnot(identical(ev(quote(fc(2))), ev(quote(f(2)))))
stopifnot(identical(ev(quote(fc(3))), ev(quote(f(3)))))
stopifnot(identical(ev(quote(fc(4))), ev(quote(f(4)))))
stopifnot(identical(ev(quote(fc(5))), ev(quote(f(5)))))
stopifnot(identical(ev(quote(fc(6))), ev(quote(f(6)))))
stopifnot(identical(ev(quote(fc(7))), ev(quote(f(7)))))
stopifnot(identical(ev(quote(fc(8))), ev(quote(f(8)))))
g <- function(x) switch(x, x = 1, y = , z = 3, w =, 5, v = )
gc <- cmpfun(g)
stopifnot(identical(ev(quote(gc("x"))), ev(quote(g("x")))))
stopifnot(identical(ev(quote(gc("y"))), ev(quote(g("y")))))
stopifnot(identical(ev(quote(gc("z"))), ev(quote(g("z")))))
stopifnot(identical(ev(quote(gc("w"))), ev(quote(g("w")))))
stopifnot(identical(ev(quote(gc("v"))), ev(quote(g("v")))))
stopifnot(identical(ev(quote(gc("A"))), ev(quote(g("A")))))
stopifnot(identical(ev(quote(gc(0))), ev(quote(g(0)))))
stopifnot(identical(ev(quote(gc(1))), ev(quote(g(1)))))
stopifnot(identical(ev(quote(gc(2))), ev(quote(g(2)))))
stopifnot(identical(ev(quote(gc(3))), ev(quote(g(3)))))
stopifnot(identical(ev(quote(gc(4))), ev(quote(g(4)))))
stopifnot(identical(ev(quote(gc(5))), ev(quote(g(5)))))
stopifnot(identical(ev(quote(gc(6))), ev(quote(g(6)))))
stopifnot(identical(ev(quote(gc(7))), ev(quote(g(7)))))
h <- function(x) switch(x, x = 1, y = , z = 3)
hc <- cmpfun(h)
stopifnot(identical(ev(quote(hc("x"))), ev(quote(h("x")))))
stopifnot(identical(ev(quote(hc("y"))), ev(quote(h("y")))))
stopifnot(identical(ev(quote(hc("z"))), ev(quote(h("z")))))
stopifnot(identical(ev(quote(hc("A"))), ev(quote(h("A")))))
stopifnot(identical(ev(quote(hc(0))), ev(quote(h(0)))))
stopifnot(identical(ev(quote(hc(1))), ev(quote(h(1)))))
stopifnot(identical(ev(quote(hc(2))), ev(quote(h(2)))))
stopifnot(identical(ev(quote(hc(3))), ev(quote(h(3)))))
stopifnot(identical(ev(quote(hc(4))), ev(quote(h(4)))))
k <- function(x) switch(x, x = 1, y = 2, z = 3)
kc <- cmpfun(k)
stopifnot(identical(ev(quote(kc("x"))), ev(quote(k("x")))))
stopifnot(identical(ev(quote(kc("y"))), ev(quote(k("y")))))
stopifnot(identical(ev(quote(kc("z"))), ev(quote(k("z")))))
stopifnot(identical(ev(quote(kc("A"))), ev(quote(k("A")))))
stopifnot(identical(ev(quote(kc(0))), ev(quote(k(0)))))
stopifnot(identical(ev(quote(kc(1))), ev(quote(k(1)))))
stopifnot(identical(ev(quote(kc(2))), ev(quote(k(2)))))
stopifnot(identical(ev(quote(kc(3))), ev(quote(k(3)))))
stopifnot(identical(ev(quote(kc(4))), ev(quote(k(4)))))
l <- function(x) switch(x, "a", "b", "c")
lc <- cmpfun(l)
ce <- function(expr) tryCatch(expr, error = function(e) "Error")
## both of these should raise errors but the messages will differ
stopifnot(identical(ce(lc("A")), ce(l("A"))))
stopifnot(identical(ev(quote(lc(0))), ev(quote(l(0)))))
stopifnot(identical(ev(quote(lc(1))), ev(quote(l(1)))))
stopifnot(identical(ev(quote(lc(2))), ev(quote(l(2)))))
stopifnot(identical(ev(quote(lc(3))), ev(quote(l(3)))))
stopifnot(identical(ev(quote(lc(4))), ev(quote(l(4)))))
l <- function(x) switch(x)
lc <- cmpfun(l)
cw <- function(expr) tryCatch(expr, warning = function(w) w)
stopifnot(identical(cw(l(1)), cw(lc(1))))
stopifnot(identical(cw(l("A")), cw(lc("A"))))
suppressWarnings(stopifnot(identical(withVisible(l(1)),
withVisible(lc(1)))))
suppressWarnings(stopifnot(identical(withVisible(l("A")),
withVisible(lc("A")))))
## Check that R_Visible is being set properly.
library(compiler)
vcheck <- function(expr)
stopifnot(withVisible(eval(compile(substitute(expr))))$visible)
asfoo <- function(x) structure(x, class = "foo")
xfoo <- asfoo(1)
## FastMath1
vcheck(sqrt(invisible(2)))
vcheck(exp(invisible(2)))
vcheck(sqrt(invisible(2L)))
vcheck(exp(invisible(2L)))
vcheck(sqrt(invisible(xfoo)))
vcheck(exp(invisible(xfoo)))
## FastUnary
vcheck(+ invisible(2))
vcheck(- invisible(2))
vcheck(+ invisible(2L))
vcheck(- invisible(2L))
vcheck(+ invisible(xfoo))
vcheck(- invisible(xfoo))
## FastBinary
vcheck(1 + invisible(2))
vcheck(1 - invisible(2))
vcheck(3 * invisible(2))
vcheck(1 / invisible(2))
vcheck(3 ^ invisible(2))
vcheck(1 + invisible(2L))
vcheck(1L + invisible(2))
vcheck(1 + invisible(xfoo))
## FastRelop2
vcheck(1 == invisible(2))
vcheck(1 != invisible(2))
vcheck(1 < invisible(2))
vcheck(1 <= invisible(2))
vcheck(1 >= invisible(2))
vcheck(1 > invisible(2))
vcheck(1 > invisible(2L))
vcheck(1L > invisible(2L))
vcheck(1 > invisible(xfoo))
## Builtin2
vcheck(1 & invisible(2))
vcheck(0 | invisible(2))
vcheck(0 | invisible(2L))
vcheck(0L | invisible(2L))
vcheck(0 | invisible(xfoo))
## Builtin1
vcheck(! invisible(2))
vcheck(! invisible(2L))
vcheck(! invisible(xfoo))
## DO_VECSUBSET
vcheck(1[invisible(1)])
vcheck(xfoo[invisible(1)])
## MATSUBSET_PTR
vcheck(matrix(1)[1, invisible(1)])
vcheck(asfoo(matrix(1))[1, invisible(1)])
## SUBSET_N_PTR
vcheck(array(1, c(1, 1, 1))[1, 1, invisible(1)])
vcheck(asfoo(array(1, c(1, 1, 1)))[1, 1, invisible(1)])
## DO_DFLTDISPATCH
vcheck(invisible(1)[])
vcheck(matrix(1)[,invisible(1)])
## not sure how to trigger [[ issue
vcheck(c(invisible(2)))
vcheck(xfoo[])
## DOLLAR
vcheck(invisible(list(x = 1))$x)
`$.foo` <- function(x, y) invisible(x)
vcheck(xfoo$bar)
## ISINTEGER
vcheck(is.integer(invisible(1)))
vcheck(is.integer(invisible(xfoo)))
## DO_ISTYPE
vcheck(is.logical(invisible(1)))
vcheck(is.double(invisible(1)))
vcheck(is.complex(invisible(1)))
vcheck(is.character(invisible(1)))
vcheck(is.symbol(invisible(1)))
## DO_ISTEST
vcheck(is.null(invisible(1)))
vcheck(is.object(invisible(1)))
vcheck(is.numeric(invisible(1)))
## &&, ||
vcheck(invisible(TRUE) || FALSE)
vcheck(FALSE || invisible(FALSE))
vcheck(invisible(FALSE) && FALSE)
vcheck(TRUE && invisible(TRUE))
## LOG, LOGBASE, MATH1
vcheck(log(invisible(2)))
vcheck(log(2, invisible(2)))
vcheck(log(invisible(xfoo)))
vcheck(log(xfoo, invisible(2)))
vcheck(sin(invisible(2)))
vcheck(cos(invisible(2)))
## DOTCALL
## COLON, SEQLEN, SEQALONG
vcheck(1 : invisible(2))
vcheck(1 : invisible(xfoo))
vcheck(seq_len(invisible(2)))
vcheck(seq_len(invisible(xfoo)))
vcheck(seq_along(invisible(1)))
vcheck(seq_along(invisible(xfoo)))

View file

@ -1 +0,0 @@
{"files":[{"filename":"/assign.R","start":0,"end":3965},{"filename":"/basics.R","start":3965,"end":6379},{"filename":"/const.R","start":6379,"end":9453},{"filename":"/curexpr.R","start":9453,"end":12013},{"filename":"/envir.R","start":12013,"end":15343},{"filename":"/jit.R","start":15343,"end":15549},{"filename":"/loop.R","start":15549,"end":16270},{"filename":"/srcref.R","start":16270,"end":18556},{"filename":"/switch.R","start":18556,"end":22434},{"filename":"/vischk.R","start":22434,"end":25167}],"remote_package_size":25167}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/AnIndex","start":0,"end":2036},{"filename":"/aliases.rds","start":2036,"end":2957},{"filename":"/datasets.rdb","start":2957,"end":211881},{"filename":"/datasets.rdx","start":211881,"end":213925},{"filename":"/paths.rds","start":213925,"end":214793}],"remote_package_size":214793}

View file

@ -1,503 +0,0 @@
<!DOCTYPE html>
<html>
<head><title>R: The R Datasets Package</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel="stylesheet" type="text/css" href="R.css" />
</head><body><div class="container">
<h1> The R Datasets Package
<img class="toplogo" src="../../../doc/html/Rlogo.svg" alt="[R logo]" />
</h1>
<hr/>
<div style="text-align: center;">
<a href="../../../doc/html/packages.html"><img class="arrow" src="../../../doc/html/left.jpg" alt="[Up]" /></a>
<a href="../../../doc/html/index.html"><img class="arrow" src="../../../doc/html/up.jpg" alt="[Top]" /></a>
</div><h2>Documentation for package &lsquo;datasets&rsquo; version 4.3.0</h2>
<ul><li><a href="../DESCRIPTION">DESCRIPTION file</a>.</li>
</ul>
<h2>Help Pages</h2>
<p style="text-align: center;">
<a href="# "> </a>
<a href="#A">A</a>
<a href="#B">B</a>
<a href="#C">C</a>
<a href="#D">D</a>
<a href="#E">E</a>
<a href="#F">F</a>
<a href="#H">H</a>
<a href="#I">I</a>
<a href="#J">J</a>
<a href="#L">L</a>
<a href="#M">M</a>
<a href="#N">N</a>
<a href="#O">O</a>
<a href="#P">P</a>
<a href="#Q">Q</a>
<a href="#R">R</a>
<a href="#S">S</a>
<a href="#T">T</a>
<a href="#U">U</a>
<a href="#V">V</a>
<a href="#W">W</a>
</p>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="datasets-package.html">datasets-package</a></td>
<td>The R Datasets Package</td></tr>
</table>
<h2><a id="A">-- A --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="ability.cov.html">ability.cov</a></td>
<td>Ability and Intelligence Tests</td></tr>
<tr><td style="width: 25%;"><a href="airmiles.html">airmiles</a></td>
<td>Passenger Miles on Commercial US Airlines, 1937-1960</td></tr>
<tr><td style="width: 25%;"><a href="AirPassengers.html">AirPassengers</a></td>
<td>Monthly Airline Passenger Numbers 1949-1960</td></tr>
<tr><td style="width: 25%;"><a href="airquality.html">airquality</a></td>
<td>New York Air Quality Measurements</td></tr>
<tr><td style="width: 25%;"><a href="anscombe.html">anscombe</a></td>
<td>Anscombe's Quartet of 'Identical' Simple Linear Regressions</td></tr>
<tr><td style="width: 25%;"><a href="attenu.html">attenu</a></td>
<td>The Joyner-Boore Attenuation Data</td></tr>
<tr><td style="width: 25%;"><a href="attitude.html">attitude</a></td>
<td>The Chatterjee-Price Attitude Data</td></tr>
<tr><td style="width: 25%;"><a href="austres.html">austres</a></td>
<td>Quarterly Time Series of the Number of Australian Residents</td></tr>
</table>
<h2><a id="B">-- B --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="beavers.html">beaver1</a></td>
<td>Body Temperature Series of Two Beavers</td></tr>
<tr><td style="width: 25%;"><a href="beavers.html">beaver2</a></td>
<td>Body Temperature Series of Two Beavers</td></tr>
<tr><td style="width: 25%;"><a href="beavers.html">beavers</a></td>
<td>Body Temperature Series of Two Beavers</td></tr>
<tr><td style="width: 25%;"><a href="BJsales.html">BJsales</a></td>
<td>Sales Data with Leading Indicator</td></tr>
<tr><td style="width: 25%;"><a href="BJsales.html">BJsales.lead</a></td>
<td>Sales Data with Leading Indicator</td></tr>
<tr><td style="width: 25%;"><a href="BOD.html">BOD</a></td>
<td>Biochemical Oxygen Demand</td></tr>
</table>
<h2><a id="C">-- C --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="cars.html">cars</a></td>
<td>Speed and Stopping Distances of Cars</td></tr>
<tr><td style="width: 25%;"><a href="ChickWeight.html">ChickWeight</a></td>
<td>Weight versus age of chicks on different diets</td></tr>
<tr><td style="width: 25%;"><a href="chickwts.html">chickwts</a></td>
<td>Chicken Weights by Feed Type</td></tr>
<tr><td style="width: 25%;"><a href="zCO2.html">CO2</a></td>
<td>Carbon Dioxide Uptake in Grass Plants</td></tr>
<tr><td style="width: 25%;"><a href="co2.html">co2</a></td>
<td>Mauna Loa Atmospheric CO2 Concentration</td></tr>
<tr><td style="width: 25%;"><a href="crimtab.html">crimtab</a></td>
<td>Student's 3000 Criminals Data</td></tr>
</table>
<h2><a id="D">-- D --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="datasets-package.html">datasets</a></td>
<td>The R Datasets Package</td></tr>
<tr><td style="width: 25%;"><a href="discoveries.html">discoveries</a></td>
<td>Yearly Numbers of Important Discoveries</td></tr>
<tr><td style="width: 25%;"><a href="DNase.html">DNase</a></td>
<td>Elisa assay of DNase</td></tr>
</table>
<h2><a id="E">-- E --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="esoph.html">esoph</a></td>
<td>Smoking, Alcohol and (O)esophageal Cancer</td></tr>
<tr><td style="width: 25%;"><a href="euro.html">euro</a></td>
<td>Conversion Rates of Euro Currencies</td></tr>
<tr><td style="width: 25%;"><a href="euro.html">euro.cross</a></td>
<td>Conversion Rates of Euro Currencies</td></tr>
<tr><td style="width: 25%;"><a href="eurodist.html">eurodist</a></td>
<td>Distances Between European Cities and Between US Cities</td></tr>
<tr><td style="width: 25%;"><a href="EuStockMarkets.html">EuStockMarkets</a></td>
<td>Daily Closing Prices of Major European Stock Indices, 1991-1998</td></tr>
</table>
<h2><a id="F">-- F --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="faithful.html">faithful</a></td>
<td>Old Faithful Geyser Data</td></tr>
<tr><td style="width: 25%;"><a href="UKLungDeaths.html">fdeaths</a></td>
<td>Monthly Deaths from Lung Diseases in the UK</td></tr>
<tr><td style="width: 25%;"><a href="Formaldehyde.html">Formaldehyde</a></td>
<td>Determination of Formaldehyde</td></tr>
<tr><td style="width: 25%;"><a href="freeny.html">freeny</a></td>
<td>Freeny's Revenue Data</td></tr>
<tr><td style="width: 25%;"><a href="freeny.html">freeny.x</a></td>
<td>Freeny's Revenue Data</td></tr>
<tr><td style="width: 25%;"><a href="freeny.html">freeny.y</a></td>
<td>Freeny's Revenue Data</td></tr>
</table>
<h2><a id="H">-- H --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="HairEyeColor.html">HairEyeColor</a></td>
<td>Hair and Eye Color of Statistics Students</td></tr>
<tr><td style="width: 25%;"><a href="Harman23.cor.html">Harman23.cor</a></td>
<td>Harman Example 2.3</td></tr>
<tr><td style="width: 25%;"><a href="Harman74.cor.html">Harman74.cor</a></td>
<td>Harman Example 7.4</td></tr>
</table>
<h2><a id="I">-- I --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="Indometh.html">Indometh</a></td>
<td>Pharmacokinetics of Indomethacin</td></tr>
<tr><td style="width: 25%;"><a href="infert.html">infert</a></td>
<td>Infertility after Spontaneous and Induced Abortion</td></tr>
<tr><td style="width: 25%;"><a href="InsectSprays.html">InsectSprays</a></td>
<td>Effectiveness of Insect Sprays</td></tr>
<tr><td style="width: 25%;"><a href="iris.html">iris</a></td>
<td>Edgar Anderson's Iris Data</td></tr>
<tr><td style="width: 25%;"><a href="iris.html">iris3</a></td>
<td>Edgar Anderson's Iris Data</td></tr>
<tr><td style="width: 25%;"><a href="islands.html">islands</a></td>
<td>Areas of the World's Major Landmasses</td></tr>
</table>
<h2><a id="J">-- J --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="JohnsonJohnson.html">JohnsonJohnson</a></td>
<td>Quarterly Earnings per Johnson &amp; Johnson Share</td></tr>
</table>
<h2><a id="L">-- L --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="LakeHuron.html">LakeHuron</a></td>
<td>Level of Lake Huron 1875-1972</td></tr>
<tr><td style="width: 25%;"><a href="UKLungDeaths.html">ldeaths</a></td>
<td>Monthly Deaths from Lung Diseases in the UK</td></tr>
<tr><td style="width: 25%;"><a href="lh.html">lh</a></td>
<td>Luteinizing Hormone in Blood Samples</td></tr>
<tr><td style="width: 25%;"><a href="LifeCycleSavings.html">LifeCycleSavings</a></td>
<td>Intercountry Life-Cycle Savings Data</td></tr>
<tr><td style="width: 25%;"><a href="Loblolly.html">Loblolly</a></td>
<td>Growth of Loblolly pine trees</td></tr>
<tr><td style="width: 25%;"><a href="longley.html">longley</a></td>
<td>Longley's Economic Regression Data</td></tr>
<tr><td style="width: 25%;"><a href="lynx.html">lynx</a></td>
<td>Annual Canadian Lynx trappings 1821-1934</td></tr>
</table>
<h2><a id="M">-- M --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="UKLungDeaths.html">mdeaths</a></td>
<td>Monthly Deaths from Lung Diseases in the UK</td></tr>
<tr><td style="width: 25%;"><a href="morley.html">morley</a></td>
<td>Michelson Speed of Light Data</td></tr>
<tr><td style="width: 25%;"><a href="mtcars.html">mtcars</a></td>
<td>Motor Trend Car Road Tests</td></tr>
</table>
<h2><a id="N">-- N --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="nhtemp.html">nhtemp</a></td>
<td>Average Yearly Temperatures in New Haven</td></tr>
<tr><td style="width: 25%;"><a href="Nile.html">Nile</a></td>
<td>Flow of the River Nile</td></tr>
<tr><td style="width: 25%;"><a href="nottem.html">nottem</a></td>
<td>Average Monthly Temperatures at Nottingham, 1920-1939</td></tr>
<tr><td style="width: 25%;"><a href="npk.html">npk</a></td>
<td>Classical N, P, K Factorial Experiment</td></tr>
</table>
<h2><a id="O">-- O --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="occupationalStatus.html">occupationalStatus</a></td>
<td>Occupational Status of Fathers and their Sons</td></tr>
<tr><td style="width: 25%;"><a href="Orange.html">Orange</a></td>
<td>Growth of Orange Trees</td></tr>
<tr><td style="width: 25%;"><a href="OrchardSprays.html">OrchardSprays</a></td>
<td>Potency of Orchard Sprays</td></tr>
</table>
<h2><a id="P">-- P --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="PlantGrowth.html">PlantGrowth</a></td>
<td>Results from an Experiment on Plant Growth</td></tr>
<tr><td style="width: 25%;"><a href="precip.html">precip</a></td>
<td>Annual Precipitation in US Cities</td></tr>
<tr><td style="width: 25%;"><a href="presidents.html">presidents</a></td>
<td>Quarterly Approval Ratings of US Presidents</td></tr>
<tr><td style="width: 25%;"><a href="pressure.html">pressure</a></td>
<td>Vapor Pressure of Mercury as a Function of Temperature</td></tr>
<tr><td style="width: 25%;"><a href="Puromycin.html">Puromycin</a></td>
<td>Reaction Velocity of an Enzymatic Reaction</td></tr>
</table>
<h2><a id="Q">-- Q --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="quakes.html">quakes</a></td>
<td>Locations of Earthquakes off Fiji</td></tr>
</table>
<h2><a id="R">-- R --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="randu.html">randu</a></td>
<td>Random Numbers from Congruential Generator RANDU</td></tr>
<tr><td style="width: 25%;"><a href="rivers.html">rivers</a></td>
<td>Lengths of Major North American Rivers</td></tr>
<tr><td style="width: 25%;"><a href="rock.html">rock</a></td>
<td>Measurements on Petroleum Rock Samples</td></tr>
</table>
<h2><a id="S">-- S --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="UKDriverDeaths.html">Seatbelts</a></td>
<td>Road Casualties in Great Britain 1969-84</td></tr>
<tr><td style="width: 25%;"><a href="sleep.html">sleep</a></td>
<td>Student's Sleep Data</td></tr>
<tr><td style="width: 25%;"><a href="stackloss.html">stack.loss</a></td>
<td>Brownlee's Stack Loss Plant Data</td></tr>
<tr><td style="width: 25%;"><a href="stackloss.html">stack.x</a></td>
<td>Brownlee's Stack Loss Plant Data</td></tr>
<tr><td style="width: 25%;"><a href="stackloss.html">stackloss</a></td>
<td>Brownlee's Stack Loss Plant Data</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state.abb</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state.area</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state.center</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state.division</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state.name</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state.region</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="state.html">state.x77</a></td>
<td>US State Facts and Figures</td></tr>
<tr><td style="width: 25%;"><a href="sunspot.month.html">sunspot.month</a></td>
<td>Monthly Sunspot Data, from 1749 to "Present"</td></tr>
<tr><td style="width: 25%;"><a href="sunspot.year.html">sunspot.year</a></td>
<td>Yearly Sunspot Data, 1700-1988</td></tr>
<tr><td style="width: 25%;"><a href="sunspots.html">sunspots</a></td>
<td>Monthly Sunspot Numbers, 1749-1983</td></tr>
<tr><td style="width: 25%;"><a href="swiss.html">swiss</a></td>
<td>Swiss Fertility and Socioeconomic Indicators (1888) Data</td></tr>
</table>
<h2><a id="T">-- T --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="Theoph.html">Theoph</a></td>
<td>Pharmacokinetics of Theophylline</td></tr>
<tr><td style="width: 25%;"><a href="Titanic.html">Titanic</a></td>
<td>Survival of passengers on the Titanic</td></tr>
<tr><td style="width: 25%;"><a href="ToothGrowth.html">ToothGrowth</a></td>
<td>The Effect of Vitamin C on Tooth Growth in Guinea Pigs</td></tr>
<tr><td style="width: 25%;"><a href="treering.html">treering</a></td>
<td>Yearly Treering Data, -6000-1979</td></tr>
<tr><td style="width: 25%;"><a href="trees.html">trees</a></td>
<td>Diameter, Height and Volume for Black Cherry Trees</td></tr>
</table>
<h2><a id="U">-- U --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="UCBAdmissions.html">UCBAdmissions</a></td>
<td>Student Admissions at UC Berkeley</td></tr>
<tr><td style="width: 25%;"><a href="UKDriverDeaths.html">UKDriverDeaths</a></td>
<td>Road Casualties in Great Britain 1969-84</td></tr>
<tr><td style="width: 25%;"><a href="UKgas.html">UKgas</a></td>
<td>UK Quarterly Gas Consumption</td></tr>
<tr><td style="width: 25%;"><a href="UKLungDeaths.html">UKLungDeaths</a></td>
<td>Monthly Deaths from Lung Diseases in the UK</td></tr>
<tr><td style="width: 25%;"><a href="USAccDeaths.html">USAccDeaths</a></td>
<td>Accidental Deaths in the US 1973-1978</td></tr>
<tr><td style="width: 25%;"><a href="USArrests.html">USArrests</a></td>
<td>Violent Crime Rates by US State</td></tr>
<tr><td style="width: 25%;"><a href="eurodist.html">UScitiesD</a></td>
<td>Distances Between European Cities and Between US Cities</td></tr>
<tr><td style="width: 25%;"><a href="USJudgeRatings.html">USJudgeRatings</a></td>
<td>Lawyers' Ratings of State Judges in the US Superior Court</td></tr>
<tr><td style="width: 25%;"><a href="USPersonalExpenditure.html">USPersonalExpenditure</a></td>
<td>Personal Expenditure Data</td></tr>
<tr><td style="width: 25%;"><a href="uspop.html">uspop</a></td>
<td>Populations Recorded by the US Census</td></tr>
</table>
<h2><a id="V">-- V --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="VADeaths.html">VADeaths</a></td>
<td>Death Rates in Virginia (1940)</td></tr>
<tr><td style="width: 25%;"><a href="volcano.html">volcano</a></td>
<td>Topographic Information on Auckland's Maunga Whau Volcano</td></tr>
</table>
<h2><a id="W">-- W --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="warpbreaks.html">warpbreaks</a></td>
<td>The Number of Breaks in Yarn during Weaving</td></tr>
<tr><td style="width: 25%;"><a href="women.html">women</a></td>
<td>Average Heights and Weights for American Women</td></tr>
<tr><td style="width: 25%;"><a href="WorldPhones.html">WorldPhones</a></td>
<td>The World's Telephones</td></tr>
<tr><td style="width: 25%;"><a href="WWWusage.html">WWWusage</a></td>
<td>Internet Usage per Minute</td></tr>
</table>
</div></body></html>
@media screen {
.container {
padding-right: 10px;
padding-left: 10px;
margin-right: auto;
margin-left: auto;
max-width: 900px;
}
}
.rimage img { /* from knitr - for examples and demos */
width: 96%;
margin-left: 2%;
}
.katex { font-size: 1.1em; }
code {
color: inherit;
background: inherit;
}
body {
line-height: 1.4;
background: white;
color: black;
}
a:link {
background: white;
color: blue;
}
a:visited {
background: white;
color: rgb(50%, 0%, 50%);
}
h1 {
background: white;
color: rgb(55%, 55%, 55%);
font-family: monospace;
font-size: 1.4em; /* x-large; */
text-align: center;
}
h2 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
text-align: center;
}
h3 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
}
h4 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
font-size: 1.2em; /* large; */
}
h5 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
}
h6 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
}
img.toplogo {
width: 4em;
vertical-align: middle;
}
img.arrow {
width: 30px;
height: 30px;
border: 0;
}
span.acronym {
font-size: small;
}
span.env {
font-family: monospace;
}
span.file {
font-family: monospace;
}
span.option{
font-family: monospace;
}
span.pkg {
font-weight: bold;
}
span.samp{
font-family: monospace;
}
div.vignettes a:hover {
background: rgb(85%, 85%, 85%);
}
tr {
vertical-align: top;
}
span.rlang {
font-family: Courier New, Courier;
color: #666666;
}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/00Index.html","start":0,"end":16089},{"filename":"/R.css","start":16089,"end":17933}],"remote_package_size":17933}

File diff suppressed because one or more lines are too long

View file

@ -1,171 +0,0 @@
### ----------- Show (almost) all named colors ---------------------
## 1) with traditional 'graphics' package:
showCols1 <- function(bg = "gray", cex = 0.75, srt = 30) {
m <- ceiling(sqrt(n <- length(cl <- colors())))
length(cl) <- m*m; cm <- matrix(cl, m)
##
require("graphics")
op <- par(mar=rep(0,4), ann=FALSE, bg = bg); on.exit(par(op))
plot(1:m,1:m, type="n", axes=FALSE)
text(col(cm), rev(row(cm)), cm, col = cl, cex=cex, srt=srt)
}
showCols1()
## 2) with 'grid' package:
showCols2 <- function(bg = "grey", cex = 0.75, rot = 30) {
m <- ceiling(sqrt(n <- length(cl <- colors())))
length(cl) <- m*m; cm <- matrix(cl, m)
##
require("grid")
grid.newpage(); vp <- viewport(width = .92, height = .92)
grid.rect(gp=gpar(fill=bg))
grid.text(cm, x = col(cm)/m, y = rev(row(cm))/m, rot = rot,
vp=vp, gp=gpar(cex = cex, col = cm))
}
showCols2()
showCols2(bg = "gray33")
###
##' @title Comparing Colors
##' @param col
##' @param nrow
##' @param ncol
##' @param txt.col
##' @return the grid layout, invisibly
##' @author Marius Hofert, originally
plotCol <- function(col, nrow=1, ncol=ceiling(length(col) / nrow),
txt.col="black") {
stopifnot(nrow >= 1, ncol >= 1)
if(length(col) > nrow*ncol)
warning("some colors will not be shown")
require(grid)
grid.newpage()
gl <- grid.layout(nrow, ncol)
pushViewport(viewport(layout=gl))
ic <- 1
for(i in 1:nrow) {
for(j in 1:ncol) {
pushViewport(viewport(layout.pos.row=i, layout.pos.col=j))
grid.rect(gp= gpar(fill=col[ic]))
grid.text(col[ic], gp=gpar(col=txt.col))
upViewport()
ic <- ic+1
}
}
upViewport()
invisible(gl)
}
## A Chocolate Bar of colors:
plotCol(c("#CC8C3C", paste0("chocolate", 2:4),
paste0("darkorange", c("",1:2)), paste0("darkgoldenrod", 1:2),
"orange", "orange1", "sandybrown", "tan1", "tan2"),
nrow=2)
##' Find close R colors() to a given color {original by Marius Hofert)
##' using Euclidean norm in (HSV / RGB / ...) color space
nearRcolor <- function(rgb, cSpace = c("hsv", "rgb255", "Luv", "Lab"),
dist = switch(cSpace, "hsv" = 0.10, "rgb255" = 30,
"Luv" = 15, "Lab" = 12))
{
if(is.character(rgb)) rgb <- col2rgb(rgb)
stopifnot(length(rgb <- as.vector(rgb)) == 3)
Rcol <- col2rgb(.cc <- colors())
uniqC <- !duplicated(t(Rcol)) # gray9 == grey9 (etc)
Rcol <- Rcol[, uniqC] ; .cc <- .cc[uniqC]
cSpace <- match.arg(cSpace)
convRGB2 <- function(Rgb, to)
t(convertColor(t(Rgb), from="sRGB", to=to, scale.in=255))
## the transformation, rgb{0..255} --> cSpace :
TransF <- switch(cSpace,
"rgb255" = identity,
"hsv" = rgb2hsv,
"Luv" = function(RGB) convRGB2(RGB, "Luv"),
"Lab" = function(RGB) convRGB2(RGB, "Lab"))
d <- sqrt(colSums((TransF(Rcol) - as.vector(TransF(rgb)))^2))
iS <- sort.list(d[near <- d <= dist])# sorted: closest first
setNames(.cc[near][iS], format(zapsmall(d[near][iS]), digits=3))
}
nearRcolor(col2rgb("tan2"), "rgb")
nearRcolor(col2rgb("tan2"), "hsv")
nearRcolor(col2rgb("tan2"), "Luv")
nearRcolor(col2rgb("tan2"), "Lab")
nearRcolor("#334455")
## Now, consider choosing a color by looking in the
## neighborhood of one you know :
plotCol(nearRcolor("deepskyblue", "rgb", dist=50))
plotCol(nearRcolor("deepskyblue", dist=.1))
plotCol(nearRcolor("tomato", "rgb", dist= 50), nrow=3)
plotCol(nearRcolor("tomato", "hsv", dist=.12), nrow=3)
plotCol(nearRcolor("tomato", "Luv", dist= 25), nrow=3)
plotCol(nearRcolor("tomato", "Lab", dist= 18), nrow=3)
### ------ hcl() explorations
hcl.wheel <-
function(chroma = 35, lums = 0:100, hues = 1:360, asp = 1,
p.cex = 0.6, do.label = FALSE, rev.lum = FALSE,
fixup = TRUE)
{
## Purpose: show chroma "sections" of hcl() color space; see ?hcl
## ----------------------------------------------------------------------
## Arguments: chroma: can be vector -> multiple plots are done,
## lums, hues, fixup : all corresponding to hcl()'s args
## rev.lum: logical indicating if luminance
## should go from outer to inner
## ----------------------------------------------------------------------
## Author: Martin Maechler, Date: 24 Jun 2005
require("graphics")
stopifnot(is.numeric(lums), lums >= 0, lums <= 100,
is.numeric(hues), hues >= 0, hues <= 360,
is.numeric(chroma), chroma >= 0, (nch <- length(chroma)) >= 1)
if(is.unsorted(hues)) hues <- sort(hues)
if(nch > 1) {
op <- par(mfrow= n2mfrow(nch), mar = c(0,0,0,0), xpd = TRUE)
on.exit(par(op))
}
for(i.c in 1:nch) {
plot(-1:1,-1:1, type="n", axes = FALSE, xlab="",ylab="", asp = asp)
## main = sprintf("hcl(h = <angle>, c = %g)", chroma[i.c]),
text(0.4, 0.99, paste("chroma =", format(chroma[i.c])),
adj = 0, font = 4)
l.s <- (if(rev.lum) rev(lums) else lums) / max(lums) # <= 1
for(ang in hues) { # could do all this using outer() instead of for()...
a. <- ang * pi/180
z.a <- exp(1i * a.)
cols <- hcl(ang, c = chroma[i.c], l = lums, fixup = fixup)
points(l.s * z.a, pch = 16, col = cols, cex = p.cex)
##if(do."text") : draw the 0,45,90,... angle "lines"
if(do.label)
text(z.a*1.05, labels = ang, col = cols[length(cols)/2],
srt = ang)
}
if(!fixup) ## show the outline
lines(exp(1i * hues * pi/180))
}
invisible()
}
## and now a few interesting calls :
hcl.wheel() # and watch it redraw when you fiddle with the graphic window
hcl.wheel(rev.lum= TRUE) # ditto
hcl.wheel(do.label = TRUE) # ditto
## Now watch:
hcl.wheel(chroma = c(25,35,45,55))
hcl.wheel(chroma = seq(10, 90, by = 10), p.cex = 0.4)
hcl.wheel(chroma = seq(10, 90, by = 10), p.cex = 0.3, fixup = FALSE)
hcl.wheel(chroma = seq(10, 90, by = 10), p.cex = 0.3, rev.lum = TRUE)
if(dev.interactive()) # new "graphics window" -- to compare with previous :
dev.new()
hcl.wheel(chroma = seq(10, 90, by = 10), p.cex = 0.3, rev.lum = TRUE, fixup=FALSE)

View file

@ -1 +0,0 @@
{"files":[{"filename":"/colors.R","start":0,"end":3766},{"filename":"/hclColors.R","start":3766,"end":6376}],"remote_package_size":6376}

View file

@ -1,696 +0,0 @@
/StandardEncoding [
% 0000
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
% 0040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
% 0240
/.notdef /exclamdown /cent /sterling /fraction /yen /florin /section
/currency /quotesingle /quotedblleft /guillemotleft /guilsinglleft /guilsinglright /fi /fl
/.notdef /endash /dagger /daggerdbl /periodcentered /.notdef /paragraph /bullet
/quotesinglbase /quotedblbase /quotedblright /guillemotright /ellipsis /perthousand /.notdef /questiondown
% 0300
/.notdef /grave /acute /circumflex /tilde /macron /breve /dotaccent
/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
/emdash /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /AE /.notdef /ordfeminine /.notdef /.notdef /.notdef /.notdef
/Lslash /Oslash /OE /ordmasculine /.notdef /.notdef /.notdef /.notdef
/.notdef /ae /.notdef /.notdef /.notdef /dotlessi /.notdef /.notdef
/lslash /oslash /oe /germandbls /.notdef /.notdef /.notdef /.notdef
]
/SymbolEncoding [
% 0000
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
% 0040
/space /exclam /universal /numbersign /existential /percent /ampersand /suchthat
/parenleft /parenright /asteriskmath /plus /comma /minus /period /slash
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
% 0100
/congruent /Alpha /Beta /Chi /Delta /Epsilon /Phi /Gamma
/Eta /Iota /theta1 /Kappa /Lambda /Mu /Nu /Omicron
/Pi /Theta /Rho /Sigma /Tau /Upsilon /sigma1 /Omega
/Xi /Psi /Zeta /bracketleft /therefore /bracketright /perpendicular /underscore
% 0140
/radicalex /alpha /beta /chi /delta /epsilon /phi /gamma
/eta /iota /phi1 /kappa /lambda /mu /nu /omicron
/pi /theta /rho /sigma /tau /upsilon /omega1 /omega
/xi /psi /zeta /braceleft /bar /braceright /similar /.notdef
% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
% 0240
/Euro /Upsilon1 /minute /lessequal /fraction /infinity /florin /club
/diamond /heart /spade /arrowboth /arrowleft /arrowup /arrowright /arrowdown
/degree /plusminus /second /greaterequal /multiply /proportional /partialdiff /bullet
/divide /notequal /equivalence /approxequal /ellipsis /arrowvertex /arrowhorizex /carriagereturn
% 0300
/aleph /Ifraktur /Rfraktur /weierstrass /circlemultiply /circleplus /emptyset /intersection
/union /propersuperset /reflexsuperset /notsubset /propersubset /reflexsubset /element /notelement
/angle /gradient /registerserif /copyrightserif /trademarkserif /product /radical /dotmath
/logicalnot /logicaland /logicalor /arrowdblboth /arrowdblleft /arrowdblup /arrowdblright /arrowdbldown
% 0340
/lozenge /angleleft /registersans /copyrightsans /trademarksans /summation /parenlefttp /parenleftex
/parenleftbt /bracketlefttp /bracketleftex /bracketleftbt /bracelefttp /braceleftmid /braceleftbt /braceex
/.notdef /angleright /integral /integraltp /integralex /integralbt /parenrighttp /parenrightex
/parenrightbt /bracketrighttp /bracketrightex /bracketrightbt /bracerighttp /bracerightmid /bracerightbt /.notdef
]
%% CP1250 This should be a postscript fragment of an array of length exactly 256
/CP1250Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
/parenleft /parenright /asterisk /plus /comma /minus /period /slash
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
/grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/Euro /.notdef /quotesinglbase /.notdef /quotedblbase /ellipsis /dagger /daggerdbl
/.notdef /perthousand /Scaron /guilsinglleft /Sacute /Tcaron /Zcaron /Zacute
/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
/.notdef /trademark /scaron /guilsinglright /sacute /tcaron /zcaron /zacute
%% 0240
/space /caron /breve /Lslash /currency /Aogonek /brokenbar /section
/dieresis /copyright /Scedilla /guillemotleft /logicalnot /hyphen /registered /Zdotaccent
/degree /plusminus /ogonek /lslash /acute /mu /paragraph /periodcentered
/cedilla /aogonek /scedilla /guillemotright /Lcaron /hungarumlaut /lcaron /zdotaccent
%% 0300
/Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
/Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
/Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
/Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcommaaccent /germandbls
% 0340
/racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
/ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
/dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
/rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcommaaccent /dotaccent
]
%% CP1251 This should be a postscript fragment of an array of length exactly 256
/CP1251Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
/parenleft /parenright /asterisk /plus /comma /minus /period /slash
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
/grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/afii10051 /afii10052 /quotesinglbase /afii10100 /quotedblbase /ellipsis /dagger /daggerdbl
/Euro /perthousand /afii10058 /guilsinglleft /afii10059 /afii10061 /afii10060 /afii10145
%% 0220
/afii10099 /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
/.notdef /trademark /afii10106 /guilsinglright /afii10107 /afii10109 /afii10108 /afii10193
%% 0240
/space /afii10062 /afii10110 /afii10057 /currency /afii10050 /brokenbar /section
/afii10023 /copyright /afii10047 /guillemotleft /logicalnot /hyphen /registered /afii10056
/degree /plusminus /afii10055 /afii10103 /afii10098 /mu /paragraph /periodcentered
/afii10071 /afii61352 /afii10101 /guillemotright /afii10105 /afii10054 /afii10102 /afii10104
%% 0300
/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025
/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033
/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041
/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049
%% 0340
/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073
/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081
/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089
/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097
]
%% CP1253 This should be a postscript fragment of an array of length exactly 256
/CP1253Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
/parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/Euro /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
/.notdef /perthousand /.notdef /guilsinglleft /.notdef /.notdef /.notdef /.notdef
/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
/.notdef /trademark /.notdef /guilsinglright /.notdef /.notdef /.notdef /.notdef
%% 0240
/space /dialytikatonos /Alphatonos /sterling /currency /yen /brokenbar /section
/dieresis /copyright /.notdef /guillemotleft /logicalnot /hyphen /registered /afii00208
/degree /plusminus /twosuperior /threesuperior /tonos /mu /paragraph /periodcentered
/Epsilontonos /Etatonos /Iotatonos /guillemotright /Omicrontonos /onehalf /Upsilontonos /Omegatonos
/iotadieresistonos /Alpha /Beta /Gamma /Deltagreek /Epsilon /Zeta /Eta
/Theta /Iota /Kappa /Lambda /Mu /Nu /Xi /Omicron
/Pi /Rho /.notdef /Sigma /Tau /Upsilon /Phi /Chi
/Psi /Omegagreek /Iotadieresis /Upsilondieresis /alphatonos /epsilontonos /etatonos /iotatonos
/upsilondieresistonos /alpha /beta /gamma /delta /epsilon /zeta /eta
/theta /iota /kappa /lambda /mugreek /nu /xi /omicron
/pi /rho /sigma1 /sigma /tau /upsilon /phi /chi
/psi /omega /iotadieresis /upsilondieresis /omicrontonos /upsilontonos /omegatonos /.notdef
]
%% CP1257 This should be a postscript fragment of an array of length exactly 256
/CP1257Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle
/parenleft /parenright /asterisk /plus /comma /minus /period /slash
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
/grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/Euro /.notdef /quotesinglbase /.notdef /quotedblbase /ellipsis /dagger /daggerdbl
/.notdef /perthousand /.notdef /guilsinglleft /.notdef /dieresis /caron /cedilla
/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
/.notdef /trademark /.notdef /guilsinglright /.notdef /macron /ogonek /.notdef
%% 0240
/space /.notdef /cent /sterling /currency /.notdef /brokenbar /section
/Oslash /copyright /Rcommaaccent /guillemotleft /logicalnot /hyphen /registered /AE
/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
/oslash /onesuperior /rcommaaccent /guillemotright /onequarter /onehalf /threequarters /ae
%% 0300
/Aogonek /Iogonek /Amacron /Cacute /Adieresis /Aring /Eogonek /Emacron
/Ccaron /Eacute /Zacute /Edotaccent /Gcommaaccent /Kcommaaccent /Imacron /Lcommaaccent
/Scaron /Nacute /Ncommaaccent /Oacute /Omacron /Otilde /Odieresis /multiply
/Uogonek /Lslash /Sacute /Umacron /Udieresis /Zdotaccent /Zcaron /germandbls
%% 0340
/aogonek /iogonek /amacron /cacute /adieresis /aring /eogonek /emacron
/ccaron /eacute /zacute /edotaccent /gcommaaccent /kcommaaccent /imacron /lcommaaccent
/scaron /nacute /ncommaaccent /oacute /omacron /otilde /odieresis /divide
/uogonek /lslash /sacute /umacron /udieresis /zdotaccent /zcaron /dotaccent
]
%% ISO8859-5 This should be a postscript fragment of an array of length exactly 256
/ISOLatin5Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0220
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0240
/space /afii10023 /afii10051 /afii10052 /afii10053 /afii10054 /afii10055 /afii10056
/afii10057 /afii10058 /afii10059 /afii10060 /afii10061 /hyphen /afii10062 /afii10145
/afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025
/afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033
%% 0300
/afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041
/afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049
/afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073
/afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081
%% 0340
/afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089
/afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097
/afii61352 /afii10071 /afii10099 /afii10100 /afii10101 /afii10102 /afii10103 /afii10104
/afii10105 /afii10106 /afii10107 /afii10108 /afii10109 /section /afii10110 /afii10193
]
%% ISO8859-7 (2003) This should be a postscript fragment of an array of length exactly 256
/ISOGreekEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0240 A5 is Drachma, not in Adobe list.
/space /quoteleft /quoteright /sterling /Euro /.notdef /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /afii00208
/degree /plusminus /twosuperior /threesuperior /tonos /dieresistonos /Alphatonos /periodcentered
/Epsilontonos /Etatonos /Iotatonos /guillemotright /Omicrontonos /onehalf /Upsilontonos /Omegatonos
/iotadieresistonos /Alpha /Beta /Gamma /Deltagreek /Epsilon /Zeta /Eta
/Theta /Iota /Kappa /Lambda /Mu /Nu /Xi /Omicron
/Pi /Rho /.notdef /Sigma /Tau /Upsilon /Phi /Chi
/Psi /Omegagreek /Iotadieresis /Upsilondieresis /alphatonos /epsilontonos /etatonos /iotatonos
%% 0340
/upsilondieresistonos /alpha /beta /gamma /delta /epsilon /zeta /eta
/theta /iota /kappa /lambda /mugreek /nu /xi /omicron
/pi /rho /sigma1 /sigma /tau /upsilon /phi /chi
/psi /omega /iotadieresis /upsilondieresis /omicrontonos /upsilontonos /omegatonos /.notdef
]
%% This should be a postscript fragment of an array of length exactly 256
/ISOLatin1Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0220
/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
%% 0240
/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
%% 0300
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
]
%% This should be a postscript fragment of an array of length exactly 256
/ISOLatin2Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0220
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0240
/space /Aogonek /breve /Lslash /currency /Lcaron /Sacute /section
/dieresis /Scaron /Scedilla /Tcaron /Zacute /hyphen /Zcaron /Zdotaccent
/degree /aogonek /ogonek /lslash /acute /lcaron /sacute /caron
/cedilla /scaron /scedilla /tcaron /zacute /hungarumlaut /zcaron /zdotaccent
%% 0300
/Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla
/Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron
/Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply
/Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /Tcommaaccent /germandbls
% 0340
/racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla
/ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron
/dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide
/rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /tcommaaccent /dotaccent
]
%% ISO8859-13 This should be a postscript fragment of an array of length exactly 256
/ISOLatin7Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0220
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0240
/space /quotedblright /cent /sterling /currency /quotedblbase /brokenbar /section
/Oslash /copyright /Rcommaaccent /guillemotleft /logicalnot /hyphen /registered /AE
/degree /plusminus /twosuperior /threesuperior /quotedblleft /mu /paragraph /periodcentered
/oslash /onesuperior /rcommaaccent /guillemotright /onequarter /onehalf /threequarters /ae
%% 0300
/Aogonek /Iogonek /Amacron /Cacute /Adieresis /Aring /Eogonek /Emacron
/Ccaron /Eacute /Zacute /Edotaccent /Gcommaaccent /Kcommaaccent /Imacron /Lcommaaccent
/Scaron /Nacute /Ncommaaccent /Oacute /Omacron /Otilde /Odieresis /multiply
/Uogonek /Lslash /Sacute /Umacron /Udieresis /Zdotaccent /Zcaron /germandbls
%% 0340
/aogonek /iogonek /amacron /cacute /adieresis /aring /eogonek /emacron
/ccaron /eacute /zacute /edotaccent /gcommaaccent /kcommaaccent /imacron /lcommaaccent
/scaron /nacute /ncommaaccent /oacute /omacron /otilde /odieresis /divide
/uogonek /lslash /sacute /umacron /udieresis /zdotaccent /zcaron /quoteright
]
%% ISO-8859-15 (draft?) Has Euro in place of currency, scaron, zcaon, oe ...
/ISOLatin9Encoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0220
/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
%% 0240
/space /exclamdown /cent /sterling /Euro /yen /Scaron /section
/scaron /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
/degree /plusminus /twosuperior /threesuperior /Zcaron /mu /paragraph /periodcentered
/zcaron /onesuperior /ordmasculine /guillemotright /OE /oe /Ydieresis /questiondown
%% 0300
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
]
%% KOI8-R This should be a postscript fragment of an array of length exactly 256
/KOI8REncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /dagger /ddagger
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0220
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /space /.notdef /degree /twosuperior /periodcentered /divide
%% 0240
/.notdef /.notdef /.notdef /afii10071 /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /afii10023 /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /copyright
%% 0300
/afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068
/afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080
/afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067
/afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092
/afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020
/afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032
/afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019
/afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044
]
%% KOI8-U This should be a postscript fragment of an array of length exactly 256
/KOI8UEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /dagger /ddagger
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /afii10050 /.notdef /.notdef
%% 0220
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /space /.notdef /degree /twosuperior /periodcentered /divide
%% 0240
/.notdef /.notdef /.notdef /afii10071 /afii10101 /.notdef /afii10103 /afii10104
/.notdef /.notdef /.notdef /.notdef /.notdef /afii10098 /.notdef /.notdef
/.notdef /.notdef /.notdef /afii10023 /afii10053 /.notdef /afii10055 /afii10056
/.notdef /.notdef /.notdef /.notdef /.notdef /afii10050 /.notdef /copyright
%% 0300
/afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068
/afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080
/afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067
/afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092
/afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020
/afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032
/afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019
/afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044
]
%% As defined by PDF 1.3, but with /currency replaced by /Euro as per Apple
/MacRomanEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute
/agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave
%% 0220
/ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute
/ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis
%% 0240
/dagger /degree /cent /sterling /section /bullet /paragraph /germandbls
/registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash
/.notdef /plusminus /.notdef /.notdef /yen /mu /.notdef /.notdef
/.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash
%% 0300
/questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft
/guillemotright /ellipsis /space /Agrave /Atilde /Otilde /OE /oe
/endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /.notdef
/ydieresis /Ydieresis /fraction /Euro /guilsinglleft /guilsinglright /fi /fl
/daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute
/Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex
/.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde
/macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
]
%% As used by PDF 1.3
/PDFDocEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/bullet /dagger /daggerdbl /ellipsis /emdash /endash /florin /fraction
/guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft
%% 0220
/quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron
/Ydieresis /Zcaron /dotlessi /lslash /oe /scaron /zcaron /.notdef
%% 0240
/Euro /exclamdown /cent /sterling /currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /.notdef /registered /macron
/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
%% 0300
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
]
%% This should be a postscript fragment of an array of length exactly 256
/TeXtextEncoding [
/minus /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon
/Phi /Psi /Omega /ff /fi /fl /ffi /ffl
/dotlessi /dotlessj /grave /acute /caron /breve /macron /ring
/cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash
%% 040
/space /exclam /quotedblright /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /exclamdown /equal /questiondown /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent
%% 0140
/quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis
%% 0200
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0220
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0240
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 0300
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
]
%% As used by PDF 1.3, but with Euro at 128, and bullet only at 149
%% as that is what Windows actually uses.
/WinAnsiEncoding [
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
%% 040
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
%% 060
/zero /one /two /three /four /five /six /seven /eight /nine
/colon /semicolon /less /equal /greater /question
%% 0100
/at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V
/W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
%% 0140
/grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t
/u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /.notdef
%% 0200
/Euro /.notdef /quotesinglbase /florin /quotedblbase /ellipsis /dagger /daggerdbl
/circumflex /perthousand /Scaron /guilsinglleft /OE /.notdef /Zcaron /.notdef
%% 0220
/.notdef /quoteleft /quoteright /quotedblleft /quotedblright /bullet /endash /emdash
/tilde /trademark /scaron /guilsinglright /oe /.notdef /zcaron /Ydieresis
%% 0240
/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
%% 0300
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
]

View file

@ -1 +0,0 @@
{"files":[{"filename":"/AdobeStd.enc","start":0,"end":2094},{"filename":"/AdobeSym.enc","start":2094,"end":4608},{"filename":"/CP1250.enc","start":4608,"end":6832},{"filename":"/CP1251.enc","start":6832,"end":9221},{"filename":"/CP1253.enc","start":9221,"end":11406},{"filename":"/CP1257.enc","start":11406,"end":13653},{"filename":"/Cyrillic.enc","start":13653,"end":16002},{"filename":"/Greek.enc","start":16002,"end":18214},{"filename":"/ISOLatin1.enc","start":18214,"end":20427},{"filename":"/ISOLatin2.enc","start":20427,"end":22614},{"filename":"/ISOLatin7.enc","start":22614,"end":24886},{"filename":"/ISOLatin9.enc","start":24886,"end":27082},{"filename":"/KOI8-R.enc","start":27082,"end":29372},{"filename":"/KOI8-U.enc","start":29372,"end":31680},{"filename":"/MacRoman.enc","start":31680,"end":33942},{"filename":"/PDFDoc.enc","start":33942,"end":36149},{"filename":"/TeXtext.enc","start":36149,"end":38240},{"filename":"/WinAnsi.enc","start":38240,"end":40551}],"remote_package_size":40551}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/Montserrat/static/Montserrat-BoldItalic.ttf","start":0,"end":202492},{"filename":"/Montserrat/static/Montserrat-Medium.ttf","start":202492,"end":400596},{"filename":"/Roboto/LICENSE.txt","start":400596,"end":412156},{"filename":"/Roboto/Roboto-Medium.ttf","start":412156,"end":580800}],"remote_package_size":580800}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/AnIndex","start":0,"end":3983},{"filename":"/aliases.rds","start":3983,"end":5596},{"filename":"/grDevices.rdb","start":5596,"end":404447},{"filename":"/grDevices.rdx","start":404447,"end":406221},{"filename":"/paths.rds","start":406221,"end":406973}],"remote_package_size":406973}

View file

@ -1,650 +0,0 @@
<!DOCTYPE html>
<html>
<head><title>R: The R Graphics Devices and Support for Colours and Fonts</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel="stylesheet" type="text/css" href="R.css" />
</head><body><div class="container">
<h1> The R Graphics Devices and Support for Colours and Fonts
<img class="toplogo" src="../../../doc/html/Rlogo.svg" alt="[R logo]" />
</h1>
<hr/>
<div style="text-align: center;">
<a href="../../../doc/html/packages.html"><img class="arrow" src="../../../doc/html/left.jpg" alt="[Up]" /></a>
<a href="../../../doc/html/index.html"><img class="arrow" src="../../../doc/html/up.jpg" alt="[Top]" /></a>
</div><h2>Documentation for package &lsquo;grDevices&rsquo; version 4.3.0</h2>
<ul><li><a href="../DESCRIPTION">DESCRIPTION file</a>.</li>
<li><a href="../demo">Code demos</a>. Use <a href="../../utils/help/demo">demo()</a> to run them.</li>
</ul>
<h2>Help Pages</h2>
<p style="text-align: center;">
<a href="# "> </a>
<a href="#A">A</a>
<a href="#B">B</a>
<a href="#C">C</a>
<a href="#D">D</a>
<a href="#E">E</a>
<a href="#F">F</a>
<a href="#G">G</a>
<a href="#H">H</a>
<a href="#I">I</a>
<a href="#J">J</a>
<a href="#M">M</a>
<a href="#N">N</a>
<a href="#O">O</a>
<a href="#P">P</a>
<a href="#Q">Q</a>
<a href="#R">R</a>
<a href="#S">S</a>
<a href="#T">T</a>
<a href="#U">U</a>
<a href="#W">W</a>
<a href="#X">X</a>
<a href="#misc">misc</a>
</p>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grDevices-package.html">grDevices-package</a></td>
<td>The R Graphics Devices and Support for Colours and Fonts</td></tr>
</table>
<h2><a id="A">-- A --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="adjustcolor.html">adjustcolor</a></td>
<td>Adjust Colors in One or More Directions Conveniently.</td></tr>
<tr><td style="width: 25%;"><a href="as.graphicsAnnot.html">as.graphicsAnnot</a></td>
<td>Coerce an Object for Graphics Annotation</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">as.raster</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">as.raster.array</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">as.raster.character</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">as.raster.logical</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">as.raster.matrix</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">as.raster.numeric</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">as.raster.raw</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">atop</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="axisTicks.html">axisTicks</a></td>
<td>Compute Pretty Axis Tick Scales</td></tr>
</table>
<h2><a id="B">-- B --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="plotmath.html">bar</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">bgroup</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="dev2bitmap.html">bitmap</a></td>
<td>Graphics Device for Bitmap Files via Ghostscript</td></tr>
<tr><td style="width: 25%;"><a href="densCols.html">blues9</a></td>
<td>Colors for Smooth Density Plots</td></tr>
<tr><td style="width: 25%;"><a href="png.html">bmp</a></td>
<td>BMP, JPEG, PNG and TIFF graphics devices</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">bold</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">bolditalic</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="boxplot.stats.html">boxplot.stats</a></td>
<td>Box Plot Statistics</td></tr>
<tr><td style="width: 25%;"><a href="bringToTop.html">bringToTop</a></td>
<td>Assign Focus to a Window</td></tr>
</table>
<h2><a id="C">-- C --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="cairoSymbolFont.html">cairoSymbolFont</a></td>
<td>Specify a Symbol Font</td></tr>
<tr><td style="width: 25%;"><a href="cairo.html">cairo_pdf</a></td>
<td>Cairographics-based SVG, PDF and PostScript Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="cairo.html">cairo_ps</a></td>
<td>Cairographics-based SVG, PDF and PostScript Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="check.options.html">check.options</a></td>
<td>Set Options with Consistency Checks</td></tr>
<tr><td style="width: 25%;"><a href="chull.html">chull</a></td>
<td>Compute Convex Hull of a Set of Points</td></tr>
<tr><td style="width: 25%;"><a href="Type1Font.html">CIDFont</a></td>
<td>Type 1 and CID Fonts</td></tr>
<tr><td style="width: 25%;"><a href="cm.html">cm</a></td>
<td>Unit Transformation</td></tr>
<tr><td style="width: 25%;"><a href="palettes.html">cm.colors</a></td>
<td>Color Palettes</td></tr>
<tr><td style="width: 25%;"><a href="col2rgb.html">col2rgb</a></td>
<td>Color to RGB Conversion</td></tr>
<tr><td style="width: 25%;"><a href="make.rgb.html">colorConverter</a></td>
<td>Create colour spaces</td></tr>
<tr><td style="width: 25%;"><a href="colorRamp.html">colorRamp</a></td>
<td>Color interpolation</td></tr>
<tr><td style="width: 25%;"><a href="colorRamp.html">colorRampPalette</a></td>
<td>Color interpolation</td></tr>
<tr><td style="width: 25%;"><a href="colors.html">colors</a></td>
<td>Color Names</td></tr>
<tr><td style="width: 25%;"><a href="convertColor.html">colorspaces</a></td>
<td>Convert between Colour Spaces</td></tr>
<tr><td style="width: 25%;"><a href="colors.html">colours</a></td>
<td>Color Names</td></tr>
<tr><td style="width: 25%;"><a href="contourLines.html">contourLines</a></td>
<td>Calculate Contour Lines</td></tr>
<tr><td style="width: 25%;"><a href="convertColor.html">convertColor</a></td>
<td>Convert between Colour Spaces</td></tr>
</table>
<h2><a id="D">-- D --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="densCols.html">densCols</a></td>
<td>Colors for Smooth Density Plots</td></tr>
<tr><td style="width: 25%;"><a href="dev.capabilities.html">dev.capabilities</a></td>
<td>Query Capabilities of the Current Graphics Device</td></tr>
<tr><td style="width: 25%;"><a href="dev.capture.html">dev.capture</a></td>
<td>Capture device output as a raster image</td></tr>
<tr><td style="width: 25%;"><a href="dev2.html">dev.control</a></td>
<td>Copy Graphics Between Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev2.html">dev.copy</a></td>
<td>Copy Graphics Between Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev2.html">dev.copy2eps</a></td>
<td>Copy Graphics Between Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev2.html">dev.copy2pdf</a></td>
<td>Copy Graphics Between Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">dev.cur</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.flush.html">dev.flush</a></td>
<td>Hold or Flush Output on an On-Screen Graphics Device.</td></tr>
<tr><td style="width: 25%;"><a href="dev.flush.html">dev.hold</a></td>
<td>Hold or Flush Output on an On-Screen Graphics Device.</td></tr>
<tr><td style="width: 25%;"><a href="dev.interactive.html">dev.interactive</a></td>
<td>Is the Current Graphics Device Interactive?</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">dev.list</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">dev.new</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">dev.next</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">dev.off</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">dev.prev</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev2.html">dev.print</a></td>
<td>Copy Graphics Between Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">dev.set</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.size.html">dev.size</a></td>
<td>Find Size of Device Surface</td></tr>
<tr><td style="width: 25%;"><a href="dev2bitmap.html">dev2bitmap</a></td>
<td>Graphics Device for Bitmap Files via Ghostscript</td></tr>
<tr><td style="width: 25%;"><a href="devAskNewPage.html">devAskNewPage</a></td>
<td>Prompt before New Page</td></tr>
<tr><td style="width: 25%;"><a href="Devices.html">device</a></td>
<td>List of Graphical Devices</td></tr>
<tr><td style="width: 25%;"><a href="dev.interactive.html">deviceIsInteractive</a></td>
<td>Is the Current Graphics Device Interactive?</td></tr>
<tr><td style="width: 25%;"><a href="Devices.html">Devices</a></td>
<td>List of Graphical Devices</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">displaystyle</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">dot</a></td>
<td>Mathematical Annotation in R</td></tr>
</table>
<h2><a id="E">-- E --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="embedFonts.html">embedFonts</a></td>
<td>Embed Fonts in PostScript and PDF</td></tr>
<tr><td style="width: 25%;"><a href="embedFonts.html">embedGlyphs</a></td>
<td>Embed Fonts in PostScript and PDF</td></tr>
<tr><td style="width: 25%;"><a href="extendrange.html">extendrange</a></td>
<td>Extend a Numerical Range by a Small Percentage</td></tr>
</table>
<h2><a id="F">-- F --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="plotmath.html">frac</a></td>
<td>Mathematical Annotation in R</td></tr>
</table>
<h2><a id="G">-- G --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="getGraphicsEvent.html">getGraphicsEvent</a></td>
<td>Wait for a mouse or keyboard event from a graphics window</td></tr>
<tr><td style="width: 25%;"><a href="getGraphicsEvent.html">getGraphicsEventEnv</a></td>
<td>Wait for a mouse or keyboard event from a graphics window</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphAnchor</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphFont</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphFontList</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphHeight</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphHeightBottom</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphInfo</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphJust</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphJust.character</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphJust.GlyphJust</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphJust.numeric</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphWidth</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="glyphInfo.html">glyphWidthLeft</a></td>
<td>Describe a Set of Typeset Glyphs.</td></tr>
<tr><td style="width: 25%;"><a href="dev.html">graphics.off</a></td>
<td>Control Multiple Devices</td></tr>
<tr><td style="width: 25%;"><a href="gray.html">gray</a></td>
<td>Gray Level Specification</td></tr>
<tr><td style="width: 25%;"><a href="gray.colors.html">gray.colors</a></td>
<td>Gray Color Palette</td></tr>
<tr><td style="width: 25%;"><a href="grDevices-package.html">grDevices</a></td>
<td>The R Graphics Devices and Support for Colours and Fonts</td></tr>
<tr><td style="width: 25%;"><a href="gray.html">grey</a></td>
<td>Gray Level Specification</td></tr>
<tr><td style="width: 25%;"><a href="gray.colors.html">grey.colors</a></td>
<td>Gray Color Palette</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">group</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="grSoftVersion.html">grSoftVersion</a></td>
<td>Report Versions of Graphics Software</td></tr>
</table>
<h2><a id="H">-- H --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="plotmath.html">hat</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="hcl.html">hcl</a></td>
<td>HCL Color Specification</td></tr>
<tr><td style="width: 25%;"><a href="palettes.html">hcl.colors</a></td>
<td>Color Palettes</td></tr>
<tr><td style="width: 25%;"><a href="palettes.html">hcl.pals</a></td>
<td>Color Palettes</td></tr>
<tr><td style="width: 25%;"><a href="palettes.html">heat.colors</a></td>
<td>Color Palettes</td></tr>
<tr><td style="width: 25%;"><a href="Hershey.html">Hershey</a></td>
<td>Hershey Vector Fonts in R</td></tr>
<tr><td style="width: 25%;"><a href="hsv.html">hsv</a></td>
<td>HSV Color Specification</td></tr>
</table>
<h2><a id="I">-- I --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="plotmath.html">inf</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">integral</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="as.raster.html">is.raster</a></td>
<td>Create a Raster Object</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">italic</a></td>
<td>Mathematical Annotation in R</td></tr>
</table>
<h2><a id="J">-- J --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="Japanese.html">Japanese</a></td>
<td>Japanese characters in R</td></tr>
<tr><td style="width: 25%;"><a href="png.html">jpeg</a></td>
<td>BMP, JPEG, PNG and TIFF graphics devices</td></tr>
</table>
<h2><a id="M">-- M --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="make.rgb.html">make.rgb</a></td>
<td>Create colour spaces</td></tr>
<tr><td style="width: 25%;"><a href="msgWindow.html">msgWindow</a></td>
<td>Manipulate a Window</td></tr>
</table>
<h2><a id="N">-- N --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="n2mfrow.html">n2mfrow</a></td>
<td>Compute Default 'mfrow' From Number of Plots</td></tr>
<tr><td style="width: 25%;"><a href="nclass.html">nclass.FD</a></td>
<td>Compute the Number of Classes for a Histogram</td></tr>
<tr><td style="width: 25%;"><a href="nclass.html">nclass.scott</a></td>
<td>Compute the Number of Classes for a Histogram</td></tr>
<tr><td style="width: 25%;"><a href="nclass.html">nclass.Sturges</a></td>
<td>Compute the Number of Classes for a Histogram</td></tr>
</table>
<h2><a id="O">-- O --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="plotmath.html">over</a></td>
<td>Mathematical Annotation in R</td></tr>
</table>
<h2><a id="P">-- P --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="palette.html">palette</a></td>
<td>Set or View the Graphics Palette</td></tr>
<tr><td style="width: 25%;"><a href="palette.html">palette.colors</a></td>
<td>Set or View the Graphics Palette</td></tr>
<tr><td style="width: 25%;"><a href="palette.html">palette.pals</a></td>
<td>Set or View the Graphics Palette</td></tr>
<tr><td style="width: 25%;"><a href="pdf.html">pdf</a></td>
<td>PDF Graphics Device</td></tr>
<tr><td style="width: 25%;"><a href="pdf.options.html">pdf.options</a></td>
<td>Auxiliary Function to Set/View Defaults for Arguments of pdf</td></tr>
<tr><td style="width: 25%;"><a href="postscriptFonts.html">pdfFonts</a></td>
<td>PostScript and PDF Font Families</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">phantom</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="pictex.html">pictex</a></td>
<td>A PicTeX Graphics Driver</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">plain</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">plotmath</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="png.html">png</a></td>
<td>BMP, JPEG, PNG and TIFF graphics devices</td></tr>
<tr><td style="width: 25%;"><a href="postscript.html">postscript</a></td>
<td>PostScript Graphics</td></tr>
<tr><td style="width: 25%;"><a href="postscriptFonts.html">postscriptFonts</a></td>
<td>PostScript and PDF Font Families</td></tr>
<tr><td style="width: 25%;"><a href="pretty.Date.html">pretty.Date</a></td>
<td>Pretty Breakpoints for Date-Time Classes</td></tr>
<tr><td style="width: 25%;"><a href="pretty.Date.html">pretty.POSIXt</a></td>
<td>Pretty Breakpoints for Date-Time Classes</td></tr>
<tr><td style="width: 25%;"><a href="recordplot.html">print.recordedplot</a></td>
<td>Record and Replay Plots</td></tr>
<tr><td style="width: 25%;"><a href="windows.html">print.SavedPlots</a></td>
<td>Windows Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="ps.options.html">ps.options</a></td>
<td>Auxiliary Function to Set/View Defaults for Arguments of postscript</td></tr>
</table>
<h2><a id="Q">-- Q --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="quartz.html">quartz</a></td>
<td>macOS Quartz Device</td></tr>
<tr><td style="width: 25%;"><a href="quartz.html">quartz.options</a></td>
<td>macOS Quartz Device</td></tr>
<tr><td style="width: 25%;"><a href="quartz.html">quartz.save</a></td>
<td>macOS Quartz Device</td></tr>
<tr><td style="width: 25%;"><a href="quartzFonts.html">quartzFont</a></td>
<td>Quartz Fonts Setup</td></tr>
<tr><td style="width: 25%;"><a href="quartzFonts.html">quartzFonts</a></td>
<td>Quartz Fonts Setup</td></tr>
</table>
<h2><a id="R">-- R --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="palettes.html">rainbow</a></td>
<td>Color Palettes</td></tr>
<tr><td style="width: 25%;"><a href="recordGraphics.html">recordGraphics</a></td>
<td>Record Graphics Operations</td></tr>
<tr><td style="width: 25%;"><a href="recordplot.html">recordPlot</a></td>
<td>Record and Replay Plots</td></tr>
<tr><td style="width: 25%;"><a href="recordplot.html">replayPlot</a></td>
<td>Record and Replay Plots</td></tr>
<tr><td style="width: 25%;"><a href="rgb.html">rgb</a></td>
<td>RGB Color Specification</td></tr>
<tr><td style="width: 25%;"><a href="rgb2hsv.html">rgb2hsv</a></td>
<td>RGB to HSV Conversion</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">ring</a></td>
<td>Mathematical Annotation in R</td></tr>
</table>
<h2><a id="S">-- S --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="savePlot.html">savePlot</a></td>
<td>Save Cairo X11 Plot to File</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">scriptscriptstyle</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">scriptstyle</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="ps.options.html">setEPS</a></td>
<td>Auxiliary Function to Set/View Defaults for Arguments of postscript</td></tr>
<tr><td style="width: 25%;"><a href="getGraphicsEvent.html">setGraphicsEventEnv</a></td>
<td>Wait for a mouse or keyboard event from a graphics window</td></tr>
<tr><td style="width: 25%;"><a href="getGraphicsEvent.html">setGraphicsEventHandlers</a></td>
<td>Wait for a mouse or keyboard event from a graphics window</td></tr>
<tr><td style="width: 25%;"><a href="ps.options.html">setPS</a></td>
<td>Auxiliary Function to Set/View Defaults for Arguments of postscript</td></tr>
<tr><td style="width: 25%;"><a href="bringToTop.html">stayOnTop</a></td>
<td>Assign Focus to a Window</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">sup</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="cairo.html">svg</a></td>
<td>Cairographics-based SVG, PDF and PostScript Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">symbol</a></td>
<td>Mathematical Annotation in R</td></tr>
</table>
<h2><a id="T">-- T --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="palettes.html">terrain.colors</a></td>
<td>Color Palettes</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">textstyle</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="png.html">tiff</a></td>
<td>BMP, JPEG, PNG and TIFF graphics devices</td></tr>
<tr><td style="width: 25%;"><a href="palettes.html">topo.colors</a></td>
<td>Color Palettes</td></tr>
<tr><td style="width: 25%;"><a href="trans3d.html">trans3d</a></td>
<td>3D to 2D Transformation for Perspective Plots</td></tr>
<tr><td style="width: 25%;"><a href="Type1Font.html">Type1Font</a></td>
<td>Type 1 and CID Fonts</td></tr>
</table>
<h2><a id="U">-- U --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="plotmath.html">underline</a></td>
<td>Mathematical Annotation in R</td></tr>
</table>
<h2><a id="W">-- W --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="plotmath.html">widehat</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="plotmath.html">widetilde</a></td>
<td>Mathematical Annotation in R</td></tr>
<tr><td style="width: 25%;"><a href="windows.html">win.graph</a></td>
<td>Windows Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="windows.html">win.metafile</a></td>
<td>Windows Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="windows.html">win.print</a></td>
<td>Windows Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="windows.html">windows</a></td>
<td>Windows Graphics Devices</td></tr>
<tr><td style="width: 25%;"><a href="windows.options.html">windows.options</a></td>
<td>Auxiliary Function to Set/View Defaults for Arguments of windows()</td></tr>
<tr><td style="width: 25%;"><a href="windowsFonts.html">windowsFont</a></td>
<td>Windows Fonts</td></tr>
<tr><td style="width: 25%;"><a href="windowsFonts.html">windowsFonts</a></td>
<td>Windows Fonts</td></tr>
</table>
<h2><a id="X">-- X --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="x11.html">X11</a></td>
<td>X Window System Graphics (X11)</td></tr>
<tr><td style="width: 25%;"><a href="x11.html">x11</a></td>
<td>X Window System Graphics (X11)</td></tr>
<tr><td style="width: 25%;"><a href="x11.html">X11.options</a></td>
<td>X Window System Graphics (X11)</td></tr>
<tr><td style="width: 25%;"><a href="x11Fonts.html">X11Font</a></td>
<td>X11 Fonts</td></tr>
<tr><td style="width: 25%;"><a href="x11Fonts.html">X11Fonts</a></td>
<td>X11 Fonts</td></tr>
<tr><td style="width: 25%;"><a href="xfig.html">xfig</a></td>
<td>XFig Graphics Device</td></tr>
<tr><td style="width: 25%;"><a href="xy.coords.html">xy.coords</a></td>
<td>Extracting Plotting Structures</td></tr>
<tr><td style="width: 25%;"><a href="xyTable.html">xyTable</a></td>
<td>Multiplicities of (x,y) Points, e.g., for a Sunflower Plot</td></tr>
<tr><td style="width: 25%;"><a href="xyz.coords.html">xyz.coords</a></td>
<td>Extracting Plotting Structures</td></tr>
</table>
<h2><a id="misc">-- misc --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="axisTicks.html">.axisPars</a></td>
<td>Compute Pretty Axis Tick Scales</td></tr>
<tr><td style="width: 25%;"><a href="postscript.html">.ps.prolog</a></td>
<td>PostScript Graphics</td></tr>
<tr><td style="width: 25%;"><a href="windows.html">[.SavedPlots</a></td>
<td>Windows Graphics Devices</td></tr>
</table>
</div></body></html>
@media screen {
.container {
padding-right: 10px;
padding-left: 10px;
margin-right: auto;
margin-left: auto;
max-width: 900px;
}
}
.rimage img { /* from knitr - for examples and demos */
width: 96%;
margin-left: 2%;
}
.katex { font-size: 1.1em; }
code {
color: inherit;
background: inherit;
}
body {
line-height: 1.4;
background: white;
color: black;
}
a:link {
background: white;
color: blue;
}
a:visited {
background: white;
color: rgb(50%, 0%, 50%);
}
h1 {
background: white;
color: rgb(55%, 55%, 55%);
font-family: monospace;
font-size: 1.4em; /* x-large; */
text-align: center;
}
h2 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
text-align: center;
}
h3 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
}
h4 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
font-size: 1.2em; /* large; */
}
h5 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
}
h6 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
}
img.toplogo {
width: 4em;
vertical-align: middle;
}
img.arrow {
width: 30px;
height: 30px;
border: 0;
}
span.acronym {
font-size: small;
}
span.env {
font-family: monospace;
}
span.file {
font-family: monospace;
}
span.option{
font-family: monospace;
}
span.pkg {
font-weight: bold;
}
span.samp{
font-family: monospace;
}
div.vignettes a:hover {
background: rgb(85%, 85%, 85%);
}
tr {
vertical-align: top;
}
span.rlang {
font-family: Courier New, Courier;
color: #666666;
}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/00Index.html","start":0,"end":24177},{"filename":"/R.css","start":24177,"end":26021}],"remote_package_size":26021}

View file

@ -1,474 +0,0 @@
cols <- t(col2rgb(palette()))
## One full space1-XYZ-space2 conversion
convertColor(cols, 'sRGB', 'Lab', scale.in=255)
## to XYZ, then to every defined space
XYZ <- convertColor(cols, 'sRGB', 'XYZ', scale.in=255)
fromXYZ <- vapply(
names(colorspaces), convertColor, FUN.VALUE=XYZ,
from='XYZ', color=XYZ, clip=NA
)
round(fromXYZ, 4)
## Back to XYZ, delta to original XYZ should be close to zero
tol <- 1e-5
toXYZ <- vapply(
dimnames(fromXYZ)[[3]],
function(x) all(abs(convertColor(fromXYZ[,,x], from=x, to='XYZ') - XYZ)<tol),
logical(1)
)
toXYZ
stopifnot(all(toXYZ | is.na(toXYZ)))
## Test Apple and CIE RGB on smaller gamuts since they clip
XYZ2 <- XYZ * .7 + .15
fromXYZ2 <- vapply(
c('Apple RGB', 'CIE RGB'), convertColor, FUN.VALUE=XYZ2,
from='XYZ', color=XYZ2, clip=NA
)
round(fromXYZ2, 4)
toXYZ2 <- vapply(
dimnames(fromXYZ2)[[3]],
function(x)
all(abs(convertColor(fromXYZ2[,,x], from=x, to='XYZ') - XYZ2)<tol),
logical(1)
)
stopifnot(all(toXYZ2))
# Seg.fault in R 3.5.3 -- 4.1.1 (but not 3.4.4) -- PR#18183
stopifnot(identical(character(0),
gray(numeric(), alpha=1/2)))
## xy.coords() and xyz.coords() -- gets *classed* warning
tools::assertWarning(xy.coords(-2:10, log = "y"), verbose=TRUE)
op <- options(warn = 2)# ==> warnings are errors
suppressWarnings(xy.coords(-2:10, log = "y"), classes="log_le_0") -> xy
stopifnot(identical(xy$y, c(rep(NA_real_,3), 1:10)))
options(op) # (reverting)
tools::assertWarning(xy.coords(-2:10, log = "y"), verbose=TRUE)
## [Bug 18476] alpha handling in palette functions (23 Feb 2023)
## https://bugs.r-project.org/show_bug.cgi?id=18476
## Attachment 3131 https://bugs.r-project.org/attachment.cgi?id=3131
## and comment #3 by Achim Zeileis
## from attachment #3131 :
check_alpha <- function(colors = "topo.colors", ncolor = 3, nalpha = 3, ...) {
## alpha sequence of length nalpha
alpha <- seq(0, 1, length.out = nalpha)
## generate colors with alpha=...
col1 <- tryCatch(do.call(colors, c(list(n = ncolor, alpha = alpha), list(...))),
error = identity)
if(inherits(col1, "error")) return(FALSE)
## generate colors without alpha= and add manually afterwards
alpha <- format(as.hexmode(round(alpha * 255 + 0.0001)), width = 2L, upper.case = TRUE)
col2 <- paste0(do.call(colors, c(list(n = ncolor), list(...))),
rep_len(alpha, ncolor))
## check whether both strategies yield identical output
identical(col1, col2)
}
expndGrid <- function(...)
expand.grid(..., KEEP.OUT.ATTRS = FALSE, stringsAsFactors = FALSE)
iSamp <- function(n, f=1/4, nS = max(min(n, 24L), f*n), full = interactive())
if(full) seq_len(n) else sample.int(n, nS)
chkALLalpha <- function(d)
vapply(iSamp(nrow(d)), function(i) do.call(check_alpha, d[i,]), NA)
## Check old palettes ------------------
d1 <- expndGrid(colors = c("rainbow", "topo.colors", "terrain.colors",
"heat.colors", "cm.colors", "gray.colors"),
ncolor = c(1, 3, 9, 100),
nalpha = c(2, 3, 9, 100))
table(L <- chkALLalpha(d1)) ## R-4.2.x: 71 FALSE, 25 TRUE -- now 96 TRUE
if(!all(L)) stop("---> not all ok")
## Check the new palettes -----------------
d2 <- expndGrid(colors = "palette.colors",
ncolor = c(1, 3, 7),
nalpha = c(2, 3, 7),
palette = print(palette.pals()))
table(L <- chkALLalpha(d2)) ## R-4.2.x: 64 FALSE, 80 TRUE -- now 144 TRUE
if(!all(L)) stop("---> not all ok")
d3 <- expndGrid(colors = "hcl.colors",
ncolor = c(1, 3, 9, 100),
nalpha = c(2, 3, 9, 100),
palette = print(hcl.pals()))
table(L <- chkALLalpha(d3)) ## R-4.2.x: 1057 FALSE, 783 TRUE -- now 1840 TRUE
if(!all(L)) stop("---> not all ok")
## tests of the fonts in the postscript() device.
testit <- function(family, encoding="default")
{
postscript("ps-tests.ps", height=7, width=7, family=family,
encoding=encoding)
plot(1:10, type="n")
text(5, 9, "Some text")
text(5, 8 , expression(italic("italic")))
text(5, 7 , expression(bold("bold")))
text(5, 6 , expression(bolditalic("bold & italic")))
text(8, 3, expression(paste(frac(1, sigma*sqrt(2*pi)), " ",
plain(e)^{frac(-(x-mu)^2, 2*sigma^2)})))
dev.off()
}
testit("Helvetica")
testit("AvantGarde")
testit("Bookman")
testit("Courier")
testit("Helvetica-Narrow")
testit("NewCenturySchoolbook")
testit("Palatino")
testit("Times")
testit("URWGothic")
testit("URWBookman")
testit("NimbusMon")
testit("NimbusSan")
testit("NimbusSanCond")
testit("CenturySch")
testit("URWPalladio")
testit("NimbusRom")
testit("URWHelvetica")
testit("URWTimes")
testit("ComputerModern", "TeXtext.enc")
unlink("ps-tests.ps")
R Under development (unstable) (2022-03-19 r81942) -- "Unsuffered Consequences"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> ## tests of the fonts in the postscript() device.
>
> testit <- function(family, encoding="default")
+ {
+ postscript("ps-tests.ps", height=7, width=7, family=family,
+ encoding=encoding)
+ plot(1:10, type="n")
+ text(5, 9, "Some text")
+ text(5, 8 , expression(italic("italic")))
+ text(5, 7 , expression(bold("bold")))
+ text(5, 6 , expression(bolditalic("bold & italic")))
+ text(8, 3, expression(paste(frac(1, sigma*sqrt(2*pi)), " ",
+ plain(e)^{frac(-(x-mu)^2, 2*sigma^2)})))
+ dev.off()
+ }
>
> testit("Helvetica")
null device
1
> testit("AvantGarde")
null device
1
> testit("Bookman")
null device
1
> testit("Courier")
null device
1
> testit("Helvetica-Narrow")
null device
1
> testit("NewCenturySchoolbook")
null device
1
> testit("Palatino")
null device
1
> testit("Times")
null device
1
>
> testit("URWGothic")
null device
1
> testit("URWBookman")
null device
1
> testit("NimbusMon")
null device
1
> testit("NimbusSan")
null device
1
> testit("NimbusSanCond")
null device
1
> testit("CenturySch")
null device
1
> testit("URWPalladio")
null device
1
> testit("NimbusRom")
null device
1
> testit("URWHelvetica")
null device
1
> testit("URWTimes")
null device
1
>
> testit("ComputerModern", "TeXtext.enc")
null device
1
>
> unlink("ps-tests.ps")
>
> proc.time()
user system elapsed
0.995 0.084 1.062
## From: Winston Chang
## To: R Devel List ...@r-project.org
## Subject: [Rd] recordPlot/replayPlot not working with saveRDS/readRDS
## Date: Mon, 2 Apr 2018 12:23:06 -0500
if (FALSE) { # bitmap png() device is optional for webR
# Save displaylist for a simple plot
png('test.png')
dev.control(displaylist ="enable")
plot(1:5, 1:5)
r <- recordPlot()
dev.off()
# Replay plot. This works.
png('test1.png')
replayPlot(r)
dev.off()
## Save the plot and load it, then replay it (in *same* R session):
## Now works, too
saveRDS(r, 'recordedplot.rds')
r2 <- readRDS('recordedplot.rds')
png('test2.png')
replayPlot(r2)
## Gave Error: NULL value passed as symbol address
dev.off()
## Now check the three PNG graphics files do not differ:
(files <- dir(pattern = "test.*[.]png"))
tt <- lapply(files, readBin, what = "raw", n = 2^12)
lengths(tt)
sapply(tt, head)
stopifnot(
identical(tt[[1]], tt[[2]]),
identical(tt[[3]], tt[[2]]))
}
## tests for the xfig device
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
unlink("xfig-tests.fig")
## tests for the xfig device
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
unlink("xfig-tests.fig")
## tests for the xfig device
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
unlink("xfig-tests.fig")
## tests for the xfig device
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
unlink("xfig-tests.fig")
## tests for the xfig device
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
unlink("xfig-tests.fig")
## tests for the xfig device
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
unlink("xfig-tests.fig")
R Under development (unstable) (2022-03-19 r81942) -- "Unsuffered Consequences"
Copyright (C) 2022 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> ## tests for the xfig device
>
>
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
>
> unlink("xfig-tests.fig")
>
> ## tests for the xfig device
>
>
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
>
> unlink("xfig-tests.fig")
>
> ## tests for the xfig device
>
>
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
>
> unlink("xfig-tests.fig")
>
> ## tests for the xfig device
>
>
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
>
> unlink("xfig-tests.fig")
>
> ## tests for the xfig device
>
>
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
>
> unlink("xfig-tests.fig")
>
> ## tests for the xfig device
>
>
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=TRUE,textspecial=FALSE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=TRUE)
>
> xfig("xfig-tests.fig",onefile=TRUE,defaultfont=FALSE,textspecial=FALSE)
>
> unlink("xfig-tests.fig")
>
>
> proc.time()
user system elapsed
0.392 0.073 0.446

View file

@ -1 +0,0 @@
{"files":[{"filename":"/convertColor-tests.R","start":0,"end":1131},{"filename":"/grDev-tsts.R","start":1131,"end":1517},{"filename":"/palettes-tests.R","start":1517,"end":3689},{"filename":"/ps-tests.R","start":3689,"end":4661},{"filename":"/ps-tests.Rout.save","start":4661,"end":6932},{"filename":"/saved-recordPlot.R","start":6932,"end":7868},{"filename":"/xfig-tests.R","start":7868,"end":9944},{"filename":"/xfig-tests.Rout.save","start":9944,"end":12915}],"remote_package_size":12915}

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
{"files":[{"filename":"/Hershey.R","start":0,"end":19972},{"filename":"/Japanese.R","start":19972,"end":54491},{"filename":"/graphics.R","start":54491,"end":59530},{"filename":"/image.R","start":59530,"end":60635},{"filename":"/persp.R","start":60635,"end":63426},{"filename":"/plotmath.R","start":63426,"end":72185}],"remote_package_size":72185}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/AnIndex","start":0,"end":2565},{"filename":"/aliases.rds","start":2565,"end":3588},{"filename":"/figures/mai.pdf","start":3588,"end":6129},{"filename":"/figures/mai.png","start":6129,"end":10796},{"filename":"/figures/oma.pdf","start":10796,"end":14559},{"filename":"/figures/oma.png","start":14559,"end":19673},{"filename":"/figures/pch.pdf","start":19673,"end":24667},{"filename":"/figures/pch.png","start":24667,"end":33954},{"filename":"/figures/pch.svg","start":33954,"end":61141},{"filename":"/graphics.rdb","start":61141,"end":538590},{"filename":"/graphics.rdx","start":538590,"end":540247},{"filename":"/paths.rds","start":540247,"end":540902}],"remote_package_size":540902}

View file

@ -1,352 +0,0 @@
<!DOCTYPE html>
<html>
<head><title>R: The R Graphics Package</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel="stylesheet" type="text/css" href="R.css" />
</head><body><div class="container">
<h1> The R Graphics Package
<img class="toplogo" src="../../../doc/html/Rlogo.svg" alt="[R logo]" />
</h1>
<hr/>
<div style="text-align: center;">
<a href="../../../doc/html/packages.html"><img class="arrow" src="../../../doc/html/left.jpg" alt="[Up]" /></a>
<a href="../../../doc/html/index.html"><img class="arrow" src="../../../doc/html/up.jpg" alt="[Top]" /></a>
</div><h2>Documentation for package &lsquo;graphics&rsquo; version 4.3.0</h2>
<ul><li><a href="../DESCRIPTION">DESCRIPTION file</a>.</li>
<li><a href="../demo">Code demos</a>. Use <a href="../../utils/help/demo">demo()</a> to run them.</li>
</ul>
<h2>Help Pages</h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="graphics-package.html">graphics-package</a></td>
<td>The R Graphics Package</td></tr>
<tr><td style="width: 25%;"><a href="filled.contour.html">.filled.contour</a></td>
<td>Level (Contour) Plots</td></tr>
<tr><td style="width: 25%;"><a href="par.html">.Pars</a></td>
<td>Set or Query Graphical Parameters</td></tr>
<tr><td style="width: 25%;"><a href="abline.html">abline</a></td>
<td>Add Straight Lines to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="arrows.html">arrows</a></td>
<td>Add Arrows to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="plot.window.html">asp</a></td>
<td>Set up World Coordinates for Graphics Window</td></tr>
<tr><td style="width: 25%;"><a href="assocplot.html">assocplot</a></td>
<td>Association Plots</td></tr>
<tr><td style="width: 25%;"><a href="zAxis.html">Axis</a></td>
<td>Generic Function to Add an Axis to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="axis.html">axis</a></td>
<td>Add an Axis to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="axis.POSIXct.html">axis.POSIXct</a></td>
<td>Date and Date-time Plotting Functions</td></tr>
<tr><td style="width: 25%;"><a href="axTicks.html">axTicks</a></td>
<td>Compute Axis Tickmark Locations</td></tr>
<tr><td style="width: 25%;"><a href="barplot.html">barplot</a></td>
<td>Bar Plots</td></tr>
<tr><td style="width: 25%;"><a href="box.html">box</a></td>
<td>Draw a Box around a Plot</td></tr>
<tr><td style="width: 25%;"><a href="boxplot.html">boxplot</a></td>
<td>Box Plots</td></tr>
<tr><td style="width: 25%;"><a href="boxplot.matrix.html">boxplot.matrix</a></td>
<td>Draw a Boxplot for each Column (Row) of a Matrix</td></tr>
<tr><td style="width: 25%;"><a href="bxp.html">bxp</a></td>
<td>Draw Box Plots from Summaries</td></tr>
<tr><td style="width: 25%;"><a href="cdplot.html">cdplot</a></td>
<td>Conditional Density Plots</td></tr>
<tr><td style="width: 25%;"><a href="clip.html">clip</a></td>
<td>Set Clipping Region</td></tr>
<tr><td style="width: 25%;"><a href="screen.html">close.screen</a></td>
<td>Creating and Controlling Multiple Screens on a Single Device</td></tr>
<tr><td style="width: 25%;"><a href="coplot.html">co.intervals</a></td>
<td>Conditioning Plots</td></tr>
<tr><td style="width: 25%;"><a href="contour.html">contour</a></td>
<td>Display Contours</td></tr>
<tr><td style="width: 25%;"><a href="coplot.html">coplot</a></td>
<td>Conditioning Plots</td></tr>
<tr><td style="width: 25%;"><a href="curve.html">curve</a></td>
<td>Draw Function Plots</td></tr>
<tr><td style="width: 25%;"><a href="dotchart.html">dotchart</a></td>
<td>Cleveland's Dot Plots</td></tr>
<tr><td style="width: 25%;"><a href="screen.html">erase.screen</a></td>
<td>Creating and Controlling Multiple Screens on a Single Device</td></tr>
<tr><td style="width: 25%;"><a href="filled.contour.html">filled.contour</a></td>
<td>Level (Contour) Plots</td></tr>
<tr><td style="width: 25%;"><a href="fourfoldplot.html">fourfoldplot</a></td>
<td>Fourfold Plots</td></tr>
<tr><td style="width: 25%;"><a href="frame.html">frame</a></td>
<td>Create / Start a New Plot Frame</td></tr>
<tr><td style="width: 25%;"><a href="par.html">graphical parameter</a></td>
<td>Set or Query Graphical Parameters</td></tr>
<tr><td style="width: 25%;"><a href="par.html">graphical parameters</a></td>
<td>Set or Query Graphical Parameters</td></tr>
<tr><td style="width: 25%;"><a href="graphics-package.html">graphics</a></td>
<td>The R Graphics Package</td></tr>
<tr><td style="width: 25%;"><a href="convertXY.html">grconvertX</a></td>
<td>Convert between Graphics Coordinate Systems</td></tr>
<tr><td style="width: 25%;"><a href="convertXY.html">grconvertY</a></td>
<td>Convert between Graphics Coordinate Systems</td></tr>
<tr><td style="width: 25%;"><a href="grid.html">grid</a></td>
<td>Add Grid to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="hist.html">hist</a></td>
<td>Histograms</td></tr>
<tr><td style="width: 25%;"><a href="hist.POSIXt.html">hist.POSIXt</a></td>
<td>Histogram of a Date or Date-Time Object</td></tr>
<tr><td style="width: 25%;"><a href="identify.html">identify</a></td>
<td>Identify Points in a Scatter Plot</td></tr>
<tr><td style="width: 25%;"><a href="image.html">image</a></td>
<td>Display a Color Image</td></tr>
<tr><td style="width: 25%;"><a href="layout.html">layout</a></td>
<td>Specifying Complex Plot Arrangements</td></tr>
<tr><td style="width: 25%;"><a href="layout.html">lcm</a></td>
<td>Specifying Complex Plot Arrangements</td></tr>
<tr><td style="width: 25%;"><a href="legend.html">legend</a></td>
<td>Add Legends to Plots</td></tr>
<tr><td style="width: 25%;"><a href="lines.html">lines</a></td>
<td>Add Connected Line Segments to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="plot.formula.html">lines.formula</a></td>
<td>Formula Notation for Scatterplots</td></tr>
<tr><td style="width: 25%;"><a href="plothistogram.html">lines.histogram</a></td>
<td>Plot Histograms</td></tr>
<tr><td style="width: 25%;"><a href="plot.table.html">lines.table</a></td>
<td>Plot Methods for 'table' Objects</td></tr>
<tr><td style="width: 25%;"><a href="locator.html">locator</a></td>
<td>Graphical Input</td></tr>
<tr><td style="width: 25%;"><a href="matplot.html">matlines</a></td>
<td>Plot Columns of Matrices</td></tr>
<tr><td style="width: 25%;"><a href="matplot.html">matplot</a></td>
<td>Plot Columns of Matrices</td></tr>
<tr><td style="width: 25%;"><a href="matplot.html">matpoints</a></td>
<td>Plot Columns of Matrices</td></tr>
<tr><td style="width: 25%;"><a href="mosaicplot.html">mosaicplot</a></td>
<td>Mosaic Plots</td></tr>
<tr><td style="width: 25%;"><a href="mtext.html">mtext</a></td>
<td>Write Text into the Margins of a Plot</td></tr>
<tr><td style="width: 25%;"><a href="pairs.html">pairs</a></td>
<td>Scatterplot Matrices</td></tr>
<tr><td style="width: 25%;"><a href="panel.smooth.html">panel.smooth</a></td>
<td>Simple Panel Plot</td></tr>
<tr><td style="width: 25%;"><a href="par.html">par</a></td>
<td>Set or Query Graphical Parameters</td></tr>
<tr><td style="width: 25%;"><a href="points.html">pch</a></td>
<td>Add Points to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="persp.html">persp</a></td>
<td>Perspective Plots</td></tr>
<tr><td style="width: 25%;"><a href="pie.html">pie</a></td>
<td>Pie Charts</td></tr>
<tr><td style="width: 25%;"><a href="plot.dataframe.html">plot.data.frame</a></td>
<td>Plot Method for Data Frames</td></tr>
<tr><td style="width: 25%;"><a href="plot.default.html">plot.default</a></td>
<td>The Default Scatterplot Function</td></tr>
<tr><td style="width: 25%;"><a href="plot.design.html">plot.design</a></td>
<td>Plot Univariate Effects of a Design or Model</td></tr>
<tr><td style="width: 25%;"><a href="plot.factor.html">plot.factor</a></td>
<td>Plotting Factor Variables</td></tr>
<tr><td style="width: 25%;"><a href="plot.formula.html">plot.formula</a></td>
<td>Formula Notation for Scatterplots</td></tr>
<tr><td style="width: 25%;"><a href="curve.html">plot.function</a></td>
<td>Draw Function Plots</td></tr>
<tr><td style="width: 25%;"><a href="plothistogram.html">plot.histogram</a></td>
<td>Plot Histograms</td></tr>
<tr><td style="width: 25%;"><a href="frame.html">plot.new</a></td>
<td>Create / Start a New Plot Frame</td></tr>
<tr><td style="width: 25%;"><a href="plot.raster.html">plot.raster</a></td>
<td>Plotting Raster Images</td></tr>
<tr><td style="width: 25%;"><a href="plot.table.html">plot.table</a></td>
<td>Plot Methods for 'table' Objects</td></tr>
<tr><td style="width: 25%;"><a href="plot.window.html">plot.window</a></td>
<td>Set up World Coordinates for Graphics Window</td></tr>
<tr><td style="width: 25%;"><a href="plot.xy.html">plot.xy</a></td>
<td>Basic Internal Plot Function</td></tr>
<tr><td style="width: 25%;"><a href="points.html">points</a></td>
<td>Add Points to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="plot.formula.html">points.formula</a></td>
<td>Formula Notation for Scatterplots</td></tr>
<tr><td style="width: 25%;"><a href="plot.table.html">points.table</a></td>
<td>Plot Methods for 'table' Objects</td></tr>
<tr><td style="width: 25%;"><a href="polygon.html">polygon</a></td>
<td>Polygon Drawing</td></tr>
<tr><td style="width: 25%;"><a href="polypath.html">polypath</a></td>
<td>Path Drawing</td></tr>
<tr><td style="width: 25%;"><a href="rasterImage.html">rasterImage</a></td>
<td>Draw One or More Raster Images</td></tr>
<tr><td style="width: 25%;"><a href="rect.html">rect</a></td>
<td>Draw One or More Rectangles</td></tr>
<tr><td style="width: 25%;"><a href="rug.html">rug</a></td>
<td>Add a Rug to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="screen.html">screen</a></td>
<td>Creating and Controlling Multiple Screens on a Single Device</td></tr>
<tr><td style="width: 25%;"><a href="segments.html">segments</a></td>
<td>Add Line Segments to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="smoothScatter.html">smoothScatter</a></td>
<td>Scatterplots with Smoothed Densities Color Representation</td></tr>
<tr><td style="width: 25%;"><a href="spineplot.html">spineplot</a></td>
<td>Spine Plots and Spinograms</td></tr>
<tr><td style="width: 25%;"><a href="screen.html">split.screen</a></td>
<td>Creating and Controlling Multiple Screens on a Single Device</td></tr>
<tr><td style="width: 25%;"><a href="stars.html">stars</a></td>
<td>Star (Spider/Radar) Plots and Segment Diagrams</td></tr>
<tr><td style="width: 25%;"><a href="stem.html">stem</a></td>
<td>Stem-and-Leaf Plots</td></tr>
<tr><td style="width: 25%;"><a href="strwidth.html">strheight</a></td>
<td>Plotting Dimensions of Character Strings and Math Expressions</td></tr>
<tr><td style="width: 25%;"><a href="stripchart.html">stripchart</a></td>
<td>1-D Scatter Plots</td></tr>
<tr><td style="width: 25%;"><a href="strwidth.html">strwidth</a></td>
<td>Plotting Dimensions of Character Strings and Math Expressions</td></tr>
<tr><td style="width: 25%;"><a href="sunflowerplot.html">sunflowerplot</a></td>
<td>Produce a Sunflower Scatter Plot</td></tr>
<tr><td style="width: 25%;"><a href="symbols.html">symbols</a></td>
<td>Draw Symbols (Circles, Squares, Stars, Thermometers, Boxplots)</td></tr>
<tr><td style="width: 25%;"><a href="text.html">text</a></td>
<td>Add Text to a Plot</td></tr>
<tr><td style="width: 25%;"><a href="plot.formula.html">text.formula</a></td>
<td>Formula Notation for Scatterplots</td></tr>
<tr><td style="width: 25%;"><a href="title.html">title</a></td>
<td>Plot Annotation</td></tr>
<tr><td style="width: 25%;"><a href="units.html">xinch</a></td>
<td>Graphical Units</td></tr>
<tr><td style="width: 25%;"><a href="plot.window.html">xlim</a></td>
<td>Set up World Coordinates for Graphics Window</td></tr>
<tr><td style="width: 25%;"><a href="xspline.html">xspline</a></td>
<td>Draw an X-spline</td></tr>
<tr><td style="width: 25%;"><a href="units.html">xyinch</a></td>
<td>Graphical Units</td></tr>
<tr><td style="width: 25%;"><a href="units.html">yinch</a></td>
<td>Graphical Units</td></tr>
<tr><td style="width: 25%;"><a href="plot.window.html">ylim</a></td>
<td>Set up World Coordinates for Graphics Window</td></tr>
</table>
</div></body></html>
@media screen {
.container {
padding-right: 10px;
padding-left: 10px;
margin-right: auto;
margin-left: auto;
max-width: 900px;
}
}
.rimage img { /* from knitr - for examples and demos */
width: 96%;
margin-left: 2%;
}
.katex { font-size: 1.1em; }
code {
color: inherit;
background: inherit;
}
body {
line-height: 1.4;
background: white;
color: black;
}
a:link {
background: white;
color: blue;
}
a:visited {
background: white;
color: rgb(50%, 0%, 50%);
}
h1 {
background: white;
color: rgb(55%, 55%, 55%);
font-family: monospace;
font-size: 1.4em; /* x-large; */
text-align: center;
}
h2 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
text-align: center;
}
h3 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
}
h4 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
font-size: 1.2em; /* large; */
}
h5 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
}
h6 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
}
img.toplogo {
width: 4em;
vertical-align: middle;
}
img.arrow {
width: 30px;
height: 30px;
border: 0;
}
span.acronym {
font-size: small;
}
span.env {
font-family: monospace;
}
span.file {
font-family: monospace;
}
span.option{
font-family: monospace;
}
span.pkg {
font-weight: bold;
}
span.samp{
font-family: monospace;
}
div.vignettes a:hover {
background: rgb(85%, 85%, 85%);
}
tr {
vertical-align: top;
}
span.rlang {
font-family: Courier New, Courier;
color: #666666;
}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/00Index.html","start":0,"end":12159},{"filename":"/R.css","start":12159,"end":14003}],"remote_package_size":14003}

File diff suppressed because it is too large Load diff

View file

@ -1 +0,0 @@
{"files":[{"filename":"/DivByZero.txt","start":0,"end":2211},{"filename":"/changes.txt","start":2211,"end":64446},{"filename":"/displaylist.pdf","start":64446,"end":120524},{"filename":"/frame.pdf","start":120524,"end":183018},{"filename":"/grid.pdf","start":183018,"end":286625},{"filename":"/grobs.pdf","start":286625,"end":337960},{"filename":"/interactive.pdf","start":337960,"end":366443},{"filename":"/locndimn.pdf","start":366443,"end":398458},{"filename":"/moveline.pdf","start":398458,"end":427697},{"filename":"/nonfinite.pdf","start":427697,"end":454272},{"filename":"/plotexample.pdf","start":454272,"end":559088},{"filename":"/rotated.pdf","start":559088,"end":611710},{"filename":"/saveload.pdf","start":611710,"end":649052},{"filename":"/sharing.pdf","start":649052,"end":676393},{"filename":"/viewports.pdf","start":676393,"end":742984}],"remote_package_size":742984}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/AnIndex","start":0,"end":6348},{"filename":"/aliases.rds","start":6348,"end":8394},{"filename":"/grid.rdb","start":8394,"end":320940},{"filename":"/grid.rdx","start":320940,"end":323171},{"filename":"/paths.rds","start":323171,"end":324040}],"remote_package_size":324040}

View file

@ -1,778 +0,0 @@
<!DOCTYPE html>
<html>
<head><title>R: The Grid Graphics Package</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel="stylesheet" type="text/css" href="R.css" />
</head><body><div class="container">
<h1> The Grid Graphics Package
<img class="toplogo" src="../../../doc/html/Rlogo.svg" alt="[R logo]" />
</h1>
<hr/>
<div style="text-align: center;">
<a href="../../../doc/html/packages.html"><img class="arrow" src="../../../doc/html/left.jpg" alt="[Up]" /></a>
<a href="../../../doc/html/index.html"><img class="arrow" src="../../../doc/html/up.jpg" alt="[Top]" /></a>
</div><h2>Documentation for package &lsquo;grid&rsquo; version 4.3.0</h2>
<ul><li><a href="../DESCRIPTION">DESCRIPTION file</a>.</li>
<li><a href="../doc/index.html">User guides, package vignettes and other documentation.</a></li>
</ul>
<h2>Help Pages</h2>
<p style="text-align: center;">
<a href="# "> </a>
<a href="#A">A</a>
<a href="#B">B</a>
<a href="#C">C</a>
<a href="#D">D</a>
<a href="#E">E</a>
<a href="#F">F</a>
<a href="#G">G</a>
<a href="#H">H</a>
<a href="#I">I</a>
<a href="#L">L</a>
<a href="#M">M</a>
<a href="#N">N</a>
<a href="#P">P</a>
<a href="#R">R</a>
<a href="#S">S</a>
<a href="#T">T</a>
<a href="#U">U</a>
<a href="#V">V</a>
<a href="#W">W</a>
<a href="#X">X</a>
<a href="#Y">Y</a>
</p>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid-package.html">grid-package</a></td>
<td>The Grid Graphics Package</td></tr>
</table>
<h2><a id="A">-- A --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="absolute.size.html">absolute.size</a></td>
<td>Absolute Size of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grid.add.html">addGrob</a></td>
<td>Add a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="gEdit.html">applyEdit</a></td>
<td>Create and Apply Edit Objects</td></tr>
<tr><td style="width: 25%;"><a href="gEdit.html">applyEdits</a></td>
<td>Create and Apply Edit Objects</td></tr>
<tr><td style="width: 25%;"><a href="grid.curve.html">arcCurvature</a></td>
<td>Draw a Curve Between Locations</td></tr>
<tr><td style="width: 25%;"><a href="arrow.html">arrow</a></td>
<td>Describe arrows to add to a line.</td></tr>
<tr><td style="width: 25%;"><a href="as.mask.html">as.mask</a></td>
<td>Define a Soft Mask</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">as.path</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="widthDetails.html">ascentDetails</a></td>
<td>Width and Height of a grid grob</td></tr>
</table>
<h2><a id="B">-- B --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.bezier.html">bezierGrob</a></td>
<td>Draw a Bezier Curve</td></tr>
<tr><td style="width: 25%;"><a href="xsplinePoints.html">bezierPoints</a></td>
<td>Return the points that would be used to draw an Xspline (or a Bezier curve).</td></tr>
</table>
<h2><a id="C">-- C --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="calcStringMetric.html">calcStringMetric</a></td>
<td>Calculate Metric Information for Text</td></tr>
<tr><td style="width: 25%;"><a href="grid.grob.html">childNames</a></td>
<td>Create Grid Graphical Objects, aka "Grob"s</td></tr>
<tr><td style="width: 25%;"><a href="grid.circle.html">circleGrob</a></td>
<td>Draw a Circle</td></tr>
<tr><td style="width: 25%;"><a href="grid.clip.html">clipGrob</a></td>
<td>Set the Clipping Region</td></tr>
<tr><td style="width: 25%;"><a href="grid.convert.html">convertHeight</a></td>
<td>Convert Between Different grid Coordinate Systems</td></tr>
<tr><td style="width: 25%;"><a href="grid.convert.html">convertUnit</a></td>
<td>Convert Between Different grid Coordinate Systems</td></tr>
<tr><td style="width: 25%;"><a href="grid.convert.html">convertWidth</a></td>
<td>Convert Between Different grid Coordinate Systems</td></tr>
<tr><td style="width: 25%;"><a href="grid.convert.html">convertX</a></td>
<td>Convert Between Different grid Coordinate Systems</td></tr>
<tr><td style="width: 25%;"><a href="grid.convert.html">convertY</a></td>
<td>Convert Between Different grid Coordinate Systems</td></tr>
<tr><td style="width: 25%;"><a href="current.viewport.html">current.parent</a></td>
<td>Get the Current Grid Viewport (Tree)</td></tr>
<tr><td style="width: 25%;"><a href="current.viewport.html">current.rotation</a></td>
<td>Get the Current Grid Viewport (Tree)</td></tr>
<tr><td style="width: 25%;"><a href="current.viewport.html">current.transform</a></td>
<td>Get the Current Grid Viewport (Tree)</td></tr>
<tr><td style="width: 25%;"><a href="current.viewport.html">current.viewport</a></td>
<td>Get the Current Grid Viewport (Tree)</td></tr>
<tr><td style="width: 25%;"><a href="current.viewport.html">current.vpPath</a></td>
<td>Get the Current Grid Viewport (Tree)</td></tr>
<tr><td style="width: 25%;"><a href="current.viewport.html">current.vpTree</a></td>
<td>Get the Current Grid Viewport (Tree)</td></tr>
<tr><td style="width: 25%;"><a href="grid.curve.html">curveGrob</a></td>
<td>Draw a Curve Between Locations</td></tr>
</table>
<h2><a id="D">-- D --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="dataViewport.html">dataViewport</a></td>
<td>Create a Viewport with Scales based on Data</td></tr>
<tr><td style="width: 25%;"><a href="grid.group.html">defineGrob</a></td>
<td>Draw a Group</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">defnRotate</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">defnScale</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">defnTranslate</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="grid.delay.html">delayGrob</a></td>
<td>Encapsulate calculations and generating a grob</td></tr>
<tr><td style="width: 25%;"><a href="depth.html">depth</a></td>
<td>Determine the number of levels in an object.</td></tr>
<tr><td style="width: 25%;"><a href="depth.html">depth.path</a></td>
<td>Determine the number of levels in an object.</td></tr>
<tr><td style="width: 25%;"><a href="depth.html">depth.viewport</a></td>
<td>Determine the number of levels in an object.</td></tr>
<tr><td style="width: 25%;"><a href="widthDetails.html">descentDetails</a></td>
<td>Width and Height of a grid grob</td></tr>
<tr><td style="width: 25%;"><a href="deviceLoc.html">deviceDim</a></td>
<td>Convert Viewport Location to Device Location</td></tr>
<tr><td style="width: 25%;"><a href="deviceLoc.html">deviceLoc</a></td>
<td>Convert Viewport Location to Device Location</td></tr>
<tr><td style="width: 25%;"><a href="viewports.html">downViewport</a></td>
<td>Maintaining and Navigating the Grid Viewport Tree</td></tr>
<tr><td style="width: 25%;"><a href="drawDetails.html">drawDetails</a></td>
<td>Customising grid Drawing</td></tr>
</table>
<h2><a id="E">-- E --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="editDetails.html">editDetails</a></td>
<td>Customising grid Editing</td></tr>
<tr><td style="width: 25%;"><a href="grid.edit.html">editGrob</a></td>
<td>Edit the Description of a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="editViewport.html">editViewport</a></td>
<td>Modify a Viewport</td></tr>
<tr><td style="width: 25%;"><a href="gridCoords.html">emptyCoords</a></td>
<td>Create Sets of Coordinates for Grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="gridCoords.html">emptyGrobCoords</a></td>
<td>Create Sets of Coordinates for Grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="gridCoords.html">emptyGTreeCoords</a></td>
<td>Create Sets of Coordinates for Grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="grid.display.list.html">engine.display.list</a></td>
<td>Control the Grid Display List</td></tr>
<tr><td style="width: 25%;"><a href="explode.html">explode</a></td>
<td>Explode a path into its components.</td></tr>
<tr><td style="width: 25%;"><a href="explode.html">explode.character</a></td>
<td>Explode a path into its components.</td></tr>
<tr><td style="width: 25%;"><a href="explode.html">explode.path</a></td>
<td>Explode a path into its components.</td></tr>
</table>
<h2><a id="F">-- F --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.stroke.html">fillGrob</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">fillGrob.GridPath</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">fillGrob.grob</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">fillStrokeGrob</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">fillStrokeGrob.GridPath</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">fillStrokeGrob.grob</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">forceGrob</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.frame.html">frameGrob</a></td>
<td>Create a Frame for Packing Objects</td></tr>
<tr><td style="width: 25%;"><a href="grid.function.html">functionGrob</a></td>
<td>Draw a curve representing a function</td></tr>
</table>
<h2><a id="G">-- G --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="gEdit.html">gEdit</a></td>
<td>Create and Apply Edit Objects</td></tr>
<tr><td style="width: 25%;"><a href="gEdit.html">gEditList</a></td>
<td>Create and Apply Edit Objects</td></tr>
<tr><td style="width: 25%;"><a href="gpar.html">get.gpar</a></td>
<td>Handling Grid Graphical Parameters</td></tr>
<tr><td style="width: 25%;"><a href="grid.get.html">getGrob</a></td>
<td>Get a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="getNames.html">getNames</a></td>
<td>List the names of grobs on the display list</td></tr>
<tr><td style="width: 25%;"><a href="grid.grob.html">gList</a></td>
<td>Create Grid Graphical Objects, aka "Grob"s</td></tr>
<tr><td style="width: 25%;"><a href="grid.glyph.html">glyphGrob</a></td>
<td>Draw Typeset Glyphs</td></tr>
<tr><td style="width: 25%;"><a href="gpar.html">gpar</a></td>
<td>Handling Grid Graphical Parameters</td></tr>
<tr><td style="width: 25%;"><a href="gPath.html">gPath</a></td>
<td>Concatenate Grob Names</td></tr>
<tr><td style="width: 25%;"><a href="Grid.html">Grid</a></td>
<td>Grid Graphics</td></tr>
<tr><td style="width: 25%;"><a href="grid.function.html">grid.abline</a></td>
<td>Draw a curve representing a function</td></tr>
<tr><td style="width: 25%;"><a href="grid.add.html">grid.add</a></td>
<td>Add a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.bezier.html">grid.bezier</a></td>
<td>Draw a Bezier Curve</td></tr>
<tr><td style="width: 25%;"><a href="grid.cap.html">grid.cap</a></td>
<td>Capture a raster image</td></tr>
<tr><td style="width: 25%;"><a href="grid.circle.html">grid.circle</a></td>
<td>Draw a Circle</td></tr>
<tr><td style="width: 25%;"><a href="grid.clip.html">grid.clip</a></td>
<td>Set the Clipping Region</td></tr>
<tr><td style="width: 25%;"><a href="grid.copy.html">grid.copy</a></td>
<td>Make a Copy of a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.curve.html">grid.curve</a></td>
<td>Draw a Curve Between Locations</td></tr>
<tr><td style="width: 25%;"><a href="grid.group.html">grid.define</a></td>
<td>Draw a Group</td></tr>
<tr><td style="width: 25%;"><a href="grid.delay.html">grid.delay</a></td>
<td>Encapsulate calculations and generating a grob</td></tr>
<tr><td style="width: 25%;"><a href="grid.display.list.html">grid.display.list</a></td>
<td>Control the Grid Display List</td></tr>
<tr><td style="width: 25%;"><a href="grid.DLapply.html">grid.DLapply</a></td>
<td>Modify the Grid Display List</td></tr>
<tr><td style="width: 25%;"><a href="grid.draw.html">grid.draw</a></td>
<td>Draw a grid grob</td></tr>
<tr><td style="width: 25%;"><a href="grid.edit.html">grid.edit</a></td>
<td>Edit the Description of a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">grid.fill</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">grid.fillStroke</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">grid.force</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">grid.force.default</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">grid.force.gPath</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">grid.force.grob</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.frame.html">grid.frame</a></td>
<td>Create a Frame for Packing Objects</td></tr>
<tr><td style="width: 25%;"><a href="grid.function.html">grid.function</a></td>
<td>Draw a curve representing a function</td></tr>
<tr><td style="width: 25%;"><a href="grid.edit.html">grid.gedit</a></td>
<td>Edit the Description of a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.get.html">grid.get</a></td>
<td>Get a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.get.html">grid.gget</a></td>
<td>Get a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.glyph.html">grid.glyph</a></td>
<td>Draw Typeset Glyphs</td></tr>
<tr><td style="width: 25%;"><a href="grid.grab.html">grid.grab</a></td>
<td>Grab the current grid output</td></tr>
<tr><td style="width: 25%;"><a href="grid.grab.html">grid.grabExpr</a></td>
<td>Grab the current grid output</td></tr>
<tr><td style="width: 25%;"><a href="grid.remove.html">grid.gremove</a></td>
<td>Remove a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.grep.html">grid.grep</a></td>
<td>Search for Grobs and/or Viewports</td></tr>
<tr><td style="width: 25%;"><a href="grid.grill.html">grid.grill</a></td>
<td>Draw a Grill</td></tr>
<tr><td style="width: 25%;"><a href="grid.group.html">grid.group</a></td>
<td>Draw a Group</td></tr>
<tr><td style="width: 25%;"><a href="grid.layout.html">grid.layout</a></td>
<td>Create a Grid Layout</td></tr>
<tr><td style="width: 25%;"><a href="legendGrob.html">grid.legend</a></td>
<td>Constructing a Legend Grob</td></tr>
<tr><td style="width: 25%;"><a href="grid.move.to.html">grid.line.to</a></td>
<td>Move or Draw to a Specified Position</td></tr>
<tr><td style="width: 25%;"><a href="grid.lines.html">grid.lines</a></td>
<td>Draw Lines in a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="grid.locator.html">grid.locator</a></td>
<td>Capture a Mouse Click</td></tr>
<tr><td style="width: 25%;"><a href="grid.ls.html">grid.ls</a></td>
<td>List the names of grobs or viewports</td></tr>
<tr><td style="width: 25%;"><a href="grid.move.to.html">grid.move.to</a></td>
<td>Move or Draw to a Specified Position</td></tr>
<tr><td style="width: 25%;"><a href="grid.newpage.html">grid.newpage</a></td>
<td>Move to a New Page on a Grid Device</td></tr>
<tr><td style="width: 25%;"><a href="grid.null.html">grid.null</a></td>
<td>Null Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.pack.html">grid.pack</a></td>
<td>Pack an Object within a Frame</td></tr>
<tr><td style="width: 25%;"><a href="grid.path.html">grid.path</a></td>
<td>Draw a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.place.html">grid.place</a></td>
<td>Place an Object within a Frame</td></tr>
<tr><td style="width: 25%;"><a href="grid.plot.and.legend.html">grid.plot.and.legend</a></td>
<td>A Simple Plot and Legend Demo</td></tr>
<tr><td style="width: 25%;"><a href="grid.points.html">grid.points</a></td>
<td>Draw Data Symbols</td></tr>
<tr><td style="width: 25%;"><a href="grid.polygon.html">grid.polygon</a></td>
<td>Draw a Polygon</td></tr>
<tr><td style="width: 25%;"><a href="grid.lines.html">grid.polyline</a></td>
<td>Draw Lines in a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="grid.pretty.html">grid.pretty</a></td>
<td>Generate a Sensible ("Pretty") Set of Breakpoints</td></tr>
<tr><td style="width: 25%;"><a href="grid.raster.html">grid.raster</a></td>
<td>Render a raster object</td></tr>
<tr><td style="width: 25%;"><a href="grid.record.html">grid.record</a></td>
<td>Encapsulate calculations and drawing</td></tr>
<tr><td style="width: 25%;"><a href="grid.rect.html">grid.rect</a></td>
<td>Draw rectangles</td></tr>
<tr><td style="width: 25%;"><a href="grid.refresh.html">grid.refresh</a></td>
<td>Refresh the current grid scene</td></tr>
<tr><td style="width: 25%;"><a href="grid.remove.html">grid.remove</a></td>
<td>Remove a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.reorder.html">grid.reorder</a></td>
<td>Reorder the children of a gTree</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">grid.revert</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">grid.revert.gPath</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.force.html">grid.revert.grob</a></td>
<td>Force a grob into its components</td></tr>
<tr><td style="width: 25%;"><a href="grid.roundrect.html">grid.roundrect</a></td>
<td>Draw a rectangle with rounded corners</td></tr>
<tr><td style="width: 25%;"><a href="grid.segments.html">grid.segments</a></td>
<td>Draw Line Segments</td></tr>
<tr><td style="width: 25%;"><a href="grid.set.html">grid.set</a></td>
<td>Set a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.show.layout.html">grid.show.layout</a></td>
<td>Draw a Diagram of a Grid Layout</td></tr>
<tr><td style="width: 25%;"><a href="grid.show.viewport.html">grid.show.viewport</a></td>
<td>Draw a Diagram of a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">grid.stroke</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.text.html">grid.text</a></td>
<td>Draw Text</td></tr>
<tr><td style="width: 25%;"><a href="grid.group.html">grid.use</a></td>
<td>Draw a Group</td></tr>
<tr><td style="width: 25%;"><a href="grid.xaxis.html">grid.xaxis</a></td>
<td>Draw an X-Axis</td></tr>
<tr><td style="width: 25%;"><a href="grid.xspline.html">grid.xspline</a></td>
<td>Draw an Xspline</td></tr>
<tr><td style="width: 25%;"><a href="grid.yaxis.html">grid.yaxis</a></td>
<td>Draw a Y-Axis</td></tr>
<tr><td style="width: 25%;"><a href="gridCoords.html">gridCoords</a></td>
<td>Create Sets of Coordinates for Grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="gridCoords.html">gridGrobCoords</a></td>
<td>Create Sets of Coordinates for Grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="gridCoords.html">gridGTreeCoords</a></td>
<td>Create Sets of Coordinates for Grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="grid.grob.html">grob</a></td>
<td>Create Grid Graphical Objects, aka "Grob"s</td></tr>
<tr><td style="width: 25%;"><a href="grobWidth.html">grobAscent</a></td>
<td>Create a Unit Describing the Width of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grobCoords.html">grobCoords</a></td>
<td>Calculate Points on the Perimeter of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grobWidth.html">grobDescent</a></td>
<td>Create a Unit Describing the Width of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grobWidth.html">grobHeight</a></td>
<td>Create a Unit Describing the Width of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grobName.html">grobName</a></td>
<td>Generate a Name for a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grid.ls.html">grobPathListing</a></td>
<td>List the names of grobs or viewports</td></tr>
<tr><td style="width: 25%;"><a href="grobCoords.html">grobPoints</a></td>
<td>Calculate Points on the Perimeter of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grid.grob.html">grobTree</a></td>
<td>Create Grid Graphical Objects, aka "Grob"s</td></tr>
<tr><td style="width: 25%;"><a href="grobWidth.html">grobWidth</a></td>
<td>Create a Unit Describing the Width of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="grobX.html">grobX</a></td>
<td>Create a Unit Describing a Grob Boundary Location</td></tr>
<tr><td style="width: 25%;"><a href="grobX.html">grobY</a></td>
<td>Create a Unit Describing a Grob Boundary Location</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">groupFlip</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="grid.group.html">groupGrob</a></td>
<td>Draw a Group</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">groupRotate</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">groupScale</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">groupShear</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">groupTranslate</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="grid.grob.html">gTree</a></td>
<td>Create Grid Graphical Objects, aka "Grob"s</td></tr>
</table>
<h2><a id="H">-- H --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="widthDetails.html">heightDetails</a></td>
<td>Width and Height of a grid grob</td></tr>
</table>
<h2><a id="I">-- I --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.grob.html">is.grob</a></td>
<td>Create Grid Graphical Objects, aka "Grob"s</td></tr>
<tr><td style="width: 25%;"><a href="unit.html">is.unit</a></td>
<td>Function to Create a Unit Object</td></tr>
<tr><td style="width: 25%;"><a href="grobCoords.html">isClosed</a></td>
<td>Calculate Points on the Perimeter of a Grob</td></tr>
<tr><td style="width: 25%;"><a href="gridCoords.html">isEmptyCoords</a></td>
<td>Create Sets of Coordinates for Grid Grobs</td></tr>
</table>
<h2><a id="L">-- L --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="legendGrob.html">legendGrob</a></td>
<td>Constructing a Legend Grob</td></tr>
<tr><td style="width: 25%;"><a href="patterns.html">linearGradient</a></td>
<td>Define Gradient and Pattern Fills</td></tr>
<tr><td style="width: 25%;"><a href="grid.lines.html">linesGrob</a></td>
<td>Draw Lines in a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="grid.move.to.html">lineToGrob</a></td>
<td>Move or Draw to a Specified Position</td></tr>
</table>
<h2><a id="M">-- M --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="makeContent.html">makeContent</a></td>
<td>Customised grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="makeContent.html">makeContext</a></td>
<td>Customised grid Grobs</td></tr>
<tr><td style="width: 25%;"><a href="grid.move.to.html">moveToGrob</a></td>
<td>Move or Draw to a Specified Position</td></tr>
</table>
<h2><a id="N">-- N --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.ls.html">nestedListing</a></td>
<td>List the names of grobs or viewports</td></tr>
<tr><td style="width: 25%;"><a href="grid.null.html">nullGrob</a></td>
<td>Null Graphical Object</td></tr>
</table>
<h2><a id="P">-- P --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.pack.html">packGrob</a></td>
<td>Pack an Object within a Frame</td></tr>
<tr><td style="width: 25%;"><a href="grid.path.html">pathGrob</a></td>
<td>Draw a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.ls.html">pathListing</a></td>
<td>List the names of grobs or viewports</td></tr>
<tr><td style="width: 25%;"><a href="patterns.html">pattern</a></td>
<td>Define Gradient and Pattern Fills</td></tr>
<tr><td style="width: 25%;"><a href="patterns.html">patterns</a></td>
<td>Define Gradient and Pattern Fills</td></tr>
<tr><td style="width: 25%;"><a href="grid.place.html">placeGrob</a></td>
<td>Place an Object within a Frame</td></tr>
<tr><td style="width: 25%;"><a href="plotViewport.html">plotViewport</a></td>
<td>Create a Viewport with a Standard Plot Layout</td></tr>
<tr><td style="width: 25%;"><a href="grid.points.html">pointsGrob</a></td>
<td>Draw Data Symbols</td></tr>
<tr><td style="width: 25%;"><a href="grid.polygon.html">polygonGrob</a></td>
<td>Draw a Polygon</td></tr>
<tr><td style="width: 25%;"><a href="grid.lines.html">polylineGrob</a></td>
<td>Draw Lines in a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="viewports.html">popViewport</a></td>
<td>Maintaining and Navigating the Grid Viewport Tree</td></tr>
<tr><td style="width: 25%;"><a href="drawDetails.html">postDrawDetails</a></td>
<td>Customising grid Drawing</td></tr>
<tr><td style="width: 25%;"><a href="drawDetails.html">preDrawDetails</a></td>
<td>Customising grid Drawing</td></tr>
<tr><td style="width: 25%;"><a href="viewports.html">pushViewport</a></td>
<td>Maintaining and Navigating the Grid Viewport Tree</td></tr>
</table>
<h2><a id="R">-- R --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="patterns.html">radialGradient</a></td>
<td>Define Gradient and Pattern Fills</td></tr>
<tr><td style="width: 25%;"><a href="grid.raster.html">rasterGrob</a></td>
<td>Render a raster object</td></tr>
<tr><td style="width: 25%;"><a href="grid.record.html">recordGrob</a></td>
<td>Encapsulate calculations and drawing</td></tr>
<tr><td style="width: 25%;"><a href="grid.rect.html">rectGrob</a></td>
<td>Draw rectangles</td></tr>
<tr><td style="width: 25%;"><a href="grid.remove.html">removeGrob</a></td>
<td>Remove a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.reorder.html">reorderGrob</a></td>
<td>Reorder the children of a gTree</td></tr>
<tr><td style="width: 25%;"><a href="valid.just.html">resolveHJust</a></td>
<td>Validate a Justification</td></tr>
<tr><td style="width: 25%;"><a href="resolveRasterSize.html">resolveRasterSize</a></td>
<td>Utility function to resolve the size of a raster grob</td></tr>
<tr><td style="width: 25%;"><a href="valid.just.html">resolveVJust</a></td>
<td>Validate a Justification</td></tr>
<tr><td style="width: 25%;"><a href="grid.roundrect.html">roundrect</a></td>
<td>Draw a rectangle with rounded corners</td></tr>
<tr><td style="width: 25%;"><a href="grid.roundrect.html">roundrectGrob</a></td>
<td>Draw a rectangle with rounded corners</td></tr>
</table>
<h2><a id="S">-- S --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="viewports.html">seekViewport</a></td>
<td>Maintaining and Navigating the Grid Viewport Tree</td></tr>
<tr><td style="width: 25%;"><a href="grid.segments.html">segmentsGrob</a></td>
<td>Draw Line Segments</td></tr>
<tr><td style="width: 25%;"><a href="grid.add.html">setChildren</a></td>
<td>Add a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="grid.set.html">setGrob</a></td>
<td>Set a Grid Graphical Object</td></tr>
<tr><td style="width: 25%;"><a href="showGrob.html">showGrob</a></td>
<td>Label grid grobs.</td></tr>
<tr><td style="width: 25%;"><a href="showViewport.html">showViewport</a></td>
<td>Display grid viewports.</td></tr>
<tr><td style="width: 25%;"><a href="stringWidth.html">stringAscent</a></td>
<td>Create a Unit Describing the Width and Height of a String or Math Expression</td></tr>
<tr><td style="width: 25%;"><a href="stringWidth.html">stringDescent</a></td>
<td>Create a Unit Describing the Width and Height of a String or Math Expression</td></tr>
<tr><td style="width: 25%;"><a href="stringWidth.html">stringHeight</a></td>
<td>Create a Unit Describing the Width and Height of a String or Math Expression</td></tr>
<tr><td style="width: 25%;"><a href="stringWidth.html">stringWidth</a></td>
<td>Create a Unit Describing the Width and Height of a String or Math Expression</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">strokeGrob</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">strokeGrob.GridPath</a></td>
<td>Stroke or Fill a Path</td></tr>
<tr><td style="width: 25%;"><a href="grid.stroke.html">strokeGrob.grob</a></td>
<td>Stroke or Fill a Path</td></tr>
</table>
<h2><a id="T">-- T --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.text.html">textGrob</a></td>
<td>Draw Text</td></tr>
</table>
<h2><a id="U">-- U --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="unit.html">unit</a></td>
<td>Function to Create a Unit Object</td></tr>
<tr><td style="width: 25%;"><a href="unit.c.html">unit.c</a></td>
<td>Combine Unit Objects</td></tr>
<tr><td style="width: 25%;"><a href="unit.length.html">unit.length</a></td>
<td>Length of a Unit Object</td></tr>
<tr><td style="width: 25%;"><a href="unit.pmin.html">unit.pmax</a></td>
<td>Parallel Unit Minima and Maxima</td></tr>
<tr><td style="width: 25%;"><a href="unit.pmin.html">unit.pmin</a></td>
<td>Parallel Unit Minima and Maxima</td></tr>
<tr><td style="width: 25%;"><a href="unit.pmin.html">unit.psum</a></td>
<td>Parallel Unit Minima and Maxima</td></tr>
<tr><td style="width: 25%;"><a href="unit.rep.html">unit.rep</a></td>
<td>Replicate Elements of Unit Objects</td></tr>
<tr><td style="width: 25%;"><a href="unitType.html">unitType</a></td>
<td>Return the Units of a Unit Object</td></tr>
<tr><td style="width: 25%;"><a href="viewports.html">upViewport</a></td>
<td>Maintaining and Navigating the Grid Viewport Tree</td></tr>
<tr><td style="width: 25%;"><a href="grid.group.html">useGrob</a></td>
<td>Draw a Group</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">useRotate</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">useScale</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">useTranslate</a></td>
<td>Define a Group Transformation</td></tr>
</table>
<h2><a id="V">-- V --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="valid.just.html">valid.just</a></td>
<td>Validate a Justification</td></tr>
<tr><td style="width: 25%;"><a href="validDetails.html">validDetails</a></td>
<td>Customising grid grob Validation</td></tr>
<tr><td style="width: 25%;"><a href="viewport.html">viewport</a></td>
<td>Create a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">viewportRotate</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">viewportScale</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">viewportTransform</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewportTransform.html">viewportTranslate</a></td>
<td>Define a Group Transformation</td></tr>
<tr><td style="width: 25%;"><a href="viewport.html">vpList</a></td>
<td>Create a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="vpPath.html">vpPath</a></td>
<td>Concatenate Viewport Names</td></tr>
<tr><td style="width: 25%;"><a href="viewport.html">vpStack</a></td>
<td>Create a Grid Viewport</td></tr>
<tr><td style="width: 25%;"><a href="viewport.html">vpTree</a></td>
<td>Create a Grid Viewport</td></tr>
</table>
<h2><a id="W">-- W --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="widthDetails.html">widthDetails</a></td>
<td>Width and Height of a grid grob</td></tr>
</table>
<h2><a id="X">-- X --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.xaxis.html">xaxisGrob</a></td>
<td>Draw an X-Axis</td></tr>
<tr><td style="width: 25%;"><a href="xDetails.html">xDetails</a></td>
<td>Boundary of a grid grob</td></tr>
<tr><td style="width: 25%;"><a href="grid.xspline.html">xsplineGrob</a></td>
<td>Draw an Xspline</td></tr>
<tr><td style="width: 25%;"><a href="xsplinePoints.html">xsplinePoints</a></td>
<td>Return the points that would be used to draw an Xspline (or a Bezier curve).</td></tr>
</table>
<h2><a id="Y">-- Y --</a></h2>
<table style="width: 100%;">
<tr><td style="width: 25%;"><a href="grid.yaxis.html">yaxisGrob</a></td>
<td>Draw a Y-Axis</td></tr>
<tr><td style="width: 25%;"><a href="xDetails.html">yDetails</a></td>
<td>Boundary of a grid grob</td></tr>
</table>
</div></body></html>
@media screen {
.container {
padding-right: 10px;
padding-left: 10px;
margin-right: auto;
margin-left: auto;
max-width: 900px;
}
}
.rimage img { /* from knitr - for examples and demos */
width: 96%;
margin-left: 2%;
}
.katex { font-size: 1.1em; }
code {
color: inherit;
background: inherit;
}
body {
line-height: 1.4;
background: white;
color: black;
}
a:link {
background: white;
color: blue;
}
a:visited {
background: white;
color: rgb(50%, 0%, 50%);
}
h1 {
background: white;
color: rgb(55%, 55%, 55%);
font-family: monospace;
font-size: 1.4em; /* x-large; */
text-align: center;
}
h2 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
text-align: center;
}
h3 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-size: 1.2em; /* large; */
}
h4 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
font-size: 1.2em; /* large; */
}
h5 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
}
h6 {
background: white;
color: rgb(40%, 40%, 40%);
font-family: monospace;
font-style: italic;
}
img.toplogo {
width: 4em;
vertical-align: middle;
}
img.arrow {
width: 30px;
height: 30px;
border: 0;
}
span.acronym {
font-size: small;
}
span.env {
font-family: monospace;
}
span.file {
font-family: monospace;
}
span.option{
font-family: monospace;
}
span.pkg {
font-weight: bold;
}
span.samp{
font-family: monospace;
}
div.vignettes a:hover {
background: rgb(85%, 85%, 85%);
}
tr {
vertical-align: top;
}
span.rlang {
font-family: Courier New, Courier;
color: #666666;
}

View file

@ -1 +0,0 @@
{"files":[{"filename":"/00Index.html","start":0,"end":32796},{"filename":"/R.css","start":32796,"end":34640}],"remote_package_size":34640}

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more