-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Scumdogsteev
committed
Jul 5, 2015
1 parent
eb2f2ad
commit 5173c78
Showing
16 changed files
with
407 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
^.*\.Rproj$ | ||
^\.Rproj\.user$ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
.Rproj.user | ||
.Rhistory | ||
.RData | ||
inst/doc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
Package: phonenumber | ||
Title: Convert letters to numbers and back as on a telephone keypad | ||
Version: 0.1.0 | ||
Authors@R: person("Steve", "Myles", email = "[email protected]", role = c("aut", "cre")) | ||
Description: This package convert English letters to numbers or numbers to | ||
English letters as on a telephone keypad. When converting letters to | ||
numbers, a character vector is returned with "A," "B," or "C" becoming 2, | ||
"D," "E", or "F" becoming 3, etc. When converting numbers to letters, a | ||
character vector is returned with multiple elements (i.e., "2" becomes a | ||
vector of "A," "B," and "C"). | ||
Depends: R (>= 3.1.3) | ||
License: MIT | ||
LazyData: true | ||
VignetteBuilder: knitr | ||
Suggests: knitr, | ||
testthat |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Generated by roxygen2 (4.1.1): do not edit by hand | ||
|
||
export(letterToNumber) | ||
export(numberToLetter) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#' | ||
#' Convert letters to numbers as on a telephone's keypad | ||
#' | ||
#' Take a character vector and convert it to the equivalent number sequence | ||
#' from a telephone's key pad | ||
#' | ||
#' @param value An input value as a character vector with one element (a string) | ||
#' | ||
#' @export | ||
#' | ||
#' @examples | ||
#' letterToNumber("R functions") | ||
#' string <- "Phone Number" | ||
#' letterToNumber(string) | ||
#' letterToNumber("Jenny's Number is 867-5309") | ||
#' @return A character vector of numbers and dashes based on value | ||
|
||
letterToNumber <- function(value) { | ||
if(is.na(value)) { stop("Argument must be a string.") } else { | ||
value <- as.character(value) | ||
value <- gsub("[^A-Za-z0-9]", "-", value) | ||
value <- toupper(value) | ||
valueSplit <- strsplit(value, "")[[1]] | ||
numString <- as.character() | ||
for (char in valueSplit) { | ||
elem <- ifelse(is.element(char, LETTERS[1:3]), "2", | ||
ifelse(is.element(char, LETTERS[4:6]), "3", | ||
ifelse(is.element(char, LETTERS[7:9]), "4", | ||
ifelse(is.element(char, LETTERS[10:12]), "5", | ||
ifelse(is.element(char, LETTERS[13:15]), "6", | ||
ifelse(is.element(char, LETTERS[16:19]), "7", | ||
ifelse(is.element(char, LETTERS[20:22]), "8", | ||
ifelse(is.element(char, "-") | | ||
suppressWarnings(!is.na(as.numeric(char))), char, | ||
"9")))))))) | ||
numString <- c(numString, elem) | ||
} | ||
return(paste0(numString, collapse = "")) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#' | ||
#' Convert numbers to letters as on a telephone's keypad | ||
#' | ||
#' Take a character vector (i.e., a telephone number) and convert it to all | ||
#' all possible letter combinations as on from a telephone's key pad | ||
#' | ||
#' @param value An input value as a character vector with one element (a string) | ||
#' | ||
#' @export | ||
#' | ||
#' @examples | ||
#' numberToLetter("911") | ||
#' numberToLetter(911) | ||
#' numberToLetter("911!") | ||
#' numberToLetter() | ||
#' | ||
#' @return A character vector of letters and dashes based on value | ||
|
||
numberToLetter <- function(value, decreasing = FALSE) { | ||
if(is.na(value)) { stop("Argument must be a string.") } else { | ||
value <- as.character(value) | ||
value <- gsub("[^A-Za-z0-9]", "-", value) | ||
value <- toupper(value) | ||
valueSplit <- strsplit(value, "")[[1]] | ||
strList <- list() | ||
for (char in valueSplit) { | ||
letterSplit <- if (char == "2") { strsplit(LETTERS[1:3], "") } else { | ||
if (char == "3") { strsplit(LETTERS[4:6], "") } else { | ||
if (char == "4") { strsplit(LETTERS[7:9], "") } else { | ||
if (char == "5") { strsplit(LETTERS[10:12], "") } else { | ||
if (char == "6") { strsplit(LETTERS[13:15], "") } else { | ||
if (char == "7") { strsplit(LETTERS[16:19], "") } else { | ||
if (char == "8") { strsplit(LETTERS[20:22], "") } else { | ||
if (char == "9") { strsplit(LETTERS[23:26], "") } else { char } | ||
}}}}}}} | ||
strList[[length(strList)+1]] <- letterSplit | ||
} | ||
strDF <- expand.grid(strList) | ||
lettString <- do.call(paste0, strDF[1:ncol(strDF)]) | ||
lettString <- sort(lettString, decreasing) | ||
return(lettString) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
phonenumber | ||
=========== | ||
|
||
An R package that converts English letters to numbers or numbers to English | ||
letters as on a telephone keypad. When converting letters to numbers, a | ||
character vector is returned with "A," "B," or "C" becoming 2, "D," "E", or "F" becoming 3, etc. When converting numbers to letters, a character vector is | ||
returned with multiple elements (i.e., "2" becomes a vector of "A," "B," and \ | ||
"C"). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
% Generated by roxygen2 (4.1.1): do not edit by hand | ||
% Please edit documentation in R/letterToNumber.R | ||
\name{letterToNumber} | ||
\alias{letterToNumber} | ||
\title{Convert letters to numbers as on a telephone's keypad} | ||
\usage{ | ||
letterToNumber(value) | ||
} | ||
\arguments{ | ||
\item{value}{An input value as a character vector with one element (a string)} | ||
} | ||
\value{ | ||
A character vector of numbers and dashes based on value | ||
} | ||
\description{ | ||
Take a character vector and convert it to the equivalent number sequence | ||
from a telephone's key pad | ||
} | ||
\examples{ | ||
letterToNumber("R functions") | ||
string <- "Phone Number" | ||
letterToNumber(string) | ||
letterToNumber("Jenny's Number is 867-5309") | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
% Generated by roxygen2 (4.1.1): do not edit by hand | ||
% Please edit documentation in R/numberToLetter.R | ||
\name{numberToLetter} | ||
\alias{numberToLetter} | ||
\title{Convert numbers to letters as on a telephone's keypad} | ||
\usage{ | ||
numberToLetter(value, decreasing = FALSE) | ||
} | ||
\arguments{ | ||
\item{value}{An input value as a character vector with one element (a string)} | ||
} | ||
\value{ | ||
A character vector of letters and dashes based on value | ||
} | ||
\description{ | ||
Take a character vector (i.e., a telephone number) and convert it to all | ||
all possible letter combinations as on from a telephone's key pad | ||
} | ||
\examples{ | ||
numberToLetter("911") | ||
numberToLetter(911) | ||
numberToLetter("911!") | ||
numberToLetter() | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
Version: 1.0 | ||
|
||
RestoreWorkspace: No | ||
SaveWorkspace: No | ||
AlwaysSaveHistory: Default | ||
|
||
EnableCodeIndexing: Yes | ||
Encoding: UTF-8 | ||
|
||
AutoAppendNewline: Yes | ||
StripTrailingWhitespace: Yes | ||
|
||
BuildType: Package | ||
PackageUseDevtools: Yes | ||
PackageInstallArgs: --no-multiarch --with-keep.source | ||
PackageRoxygenize: rd,collate,namespace |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
library(testthat) | ||
library(phonenumber) | ||
|
||
test_check("phonenumber") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
exportPattern("^[^\\.]") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
library(phonenumber) | ||
context("letterToNumber") | ||
|
||
test_that("letterToNumber returns the correct numbers", { | ||
expect_equal(letterToNumber("a"), "2") | ||
expect_equal(letterToNumber("b"), "2") | ||
expect_equal(letterToNumber("c"), "2") | ||
expect_equal(letterToNumber("d"), "3") | ||
expect_equal(letterToNumber("e"), "3") | ||
expect_equal(letterToNumber("f"), "3") | ||
expect_equal(letterToNumber("g"), "4") | ||
expect_equal(letterToNumber("h"), "4") | ||
expect_equal(letterToNumber("i"), "4") | ||
expect_equal(letterToNumber("j"), "5") | ||
expect_equal(letterToNumber("k"), "5") | ||
expect_equal(letterToNumber("l"), "5") | ||
expect_equal(letterToNumber("m"), "6") | ||
expect_equal(letterToNumber("n"), "6") | ||
expect_equal(letterToNumber("o"), "6") | ||
expect_equal(letterToNumber("p"), "7") | ||
expect_equal(letterToNumber("q"), "7") | ||
expect_equal(letterToNumber("r"), "7") | ||
expect_equal(letterToNumber("s"), "7") | ||
expect_equal(letterToNumber("t"), "8") | ||
expect_equal(letterToNumber("u"), "8") | ||
expect_equal(letterToNumber("v"), "8") | ||
expect_equal(letterToNumber("w"), "9") | ||
expect_equal(letterToNumber("x"), "9") | ||
expect_equal(letterToNumber("y"), "9") | ||
expect_equal(letterToNumber("z"), "9") | ||
expect_equal(letterToNumber("A"), "2") | ||
expect_equal(letterToNumber("B"), "2") | ||
expect_equal(letterToNumber("C"), "2") | ||
expect_equal(letterToNumber("D"), "3") | ||
expect_equal(letterToNumber("E"), "3") | ||
expect_equal(letterToNumber("F"), "3") | ||
expect_equal(letterToNumber("G"), "4") | ||
expect_equal(letterToNumber("H"), "4") | ||
expect_equal(letterToNumber("I"), "4") | ||
expect_equal(letterToNumber("J"), "5") | ||
expect_equal(letterToNumber("K"), "5") | ||
expect_equal(letterToNumber("L"), "5") | ||
expect_equal(letterToNumber("M"), "6") | ||
expect_equal(letterToNumber("N"), "6") | ||
expect_equal(letterToNumber("O"), "6") | ||
expect_equal(letterToNumber("P"), "7") | ||
expect_equal(letterToNumber("Q"), "7") | ||
expect_equal(letterToNumber("R"), "7") | ||
expect_equal(letterToNumber("S"), "7") | ||
expect_equal(letterToNumber("T"), "8") | ||
expect_equal(letterToNumber("U"), "8") | ||
expect_equal(letterToNumber("V"), "8") | ||
expect_equal(letterToNumber("W"), "9") | ||
expect_equal(letterToNumber("X"), "9") | ||
expect_equal(letterToNumber("Y"), "9") | ||
expect_equal(letterToNumber("Z"), "9") | ||
expect_equal(letterToNumber("1"), "1") | ||
expect_equal(letterToNumber("0"), "0") | ||
expect_equal(letterToNumber("-"), "-") | ||
expect_equal(letterToNumber("#"), "-") | ||
expect_equal(letterToNumber("!"), "-") | ||
expect_equal(letterToNumber(" "), "-") | ||
expect_equal(letterToNumber("adZ 123"), "239-123") | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
library(phonenumber) | ||
context("numberToLetter") | ||
|
||
test_that("numberToLetter returns the correct letters", { | ||
expect_equal(numberToLetter("2"), c("A", "B", "C")) | ||
expect_equal(numberToLetter("3"), c("D", "E", "F")) | ||
expect_equal(numberToLetter("4"), c("G", "H", "I")) | ||
expect_equal(numberToLetter("5"), c("J", "K", "L")) | ||
expect_equal(numberToLetter("6"), c("M", "N", "O")) | ||
expect_equal(numberToLetter("7"), c("P", "Q", "R", "S")) | ||
expect_equal(numberToLetter("8"), c("T", "U", "V")) | ||
expect_equal(numberToLetter("9"), c("W", "X", "Y", "Z")) | ||
expect_equal(numberToLetter("1"), "1") | ||
expect_equal(numberToLetter("0"), "0") | ||
expect_equal(numberToLetter("-"), "-") | ||
expect_equal(numberToLetter("#"), "-") | ||
expect_equal(numberToLetter("!"), "-") | ||
expect_equal(numberToLetter(" "), "-") | ||
expect_equal(numberToLetter("911!"), c("W11-", "X11-", "Y11-", "Z11-")) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
--- | ||
title: "Phone Number" | ||
author: "Steve Myles" | ||
date: "`r Sys.Date()`" | ||
output: rmarkdown::html_vignette | ||
vignette: > | ||
%\VignetteIndexEntry{Vignette Title} | ||
%\VignetteEngine{knitr::rmarkdown} | ||
%\VignetteEncoding{UTF-8} | ||
--- | ||
|
||
## Introduction to phonenumber | ||
|
||
This document describes the usage of the two functions in the `phonenumber` | ||
package. Note that, though this package's functions convert back and forth from | ||
numbers to English letters as on a telephone's keypad. Note that the length of | ||
the character string need not conform to any standard length telephone number. | ||
|
||
### phonenumber's functions | ||
|
||
* `letterToNumber` | ||
* `numberToLetter` | ||
|
||
### Telephone keypad | ||
|
||
For purposes of this package, the mapping of numbers to letters on a telephone's | ||
keypad are as follows: | ||
|
||
* 2 corresponds to A, B, C | ||
* 3 corresponds to D, E, F | ||
* 4 corresponds to G, H, I | ||
* 5 corresponds to J, K, L | ||
* 6 corresponds to M, N, O | ||
* 7 corresponds to P, Q, R, S | ||
* 8 corresponds to T, U, V | ||
* 9 corresponds to W, X, Y, Z | ||
* 1 and 0 do not have corresponding letters | ||
|
||
(I am aware that on some telephones, primarily older models, Q and Z are mapped | ||
to 0 rather than to 7 and 9.) | ||
|
||
## `letterToNumber` | ||
|
||
`letterToNumber` converts a string containing letters into the corresponding | ||
numbers on a telephone's keypad. For example, if the user wants to know what telephone number corresponds to "Texas:" | ||
|
||
```{r letterToNumber ex1, echo = TRUE} | ||
string <- "Texas" | ||
letterToNumber(string) | ||
``` | ||
|
||
The function is not limited to letters, though. Any numeric characters are | ||
returned as is and any non-alphanumeric characters (including spaces) are | ||
converted to dashes (-) and 1 and 0 are returned as is: | ||
|
||
```{r letterToNumber ex2, echo = TRUE} | ||
string <- "Texas is #1" | ||
letterToNumber(string) | ||
``` | ||
|
||
## `numberToLetter` | ||
|
||
`numberToLetter` converts a string containing numbers into the corresponding | ||
letters on a telephone's keypad. For example, if the user wants to know what | ||
possible character strings could be spelled by a sequence of numbers (e.g., 22): | ||
|
||
```{r numberToLetter ex1, echo = TRUE} | ||
string <- "22" | ||
numberToLetter(string) | ||
``` | ||
|
||
The function is not limited to numbers, though. Any alphabetic characters are | ||
returned as is and any non-alphanumeric characters (including spaces) are | ||
converted to dashes (-) and 1 and 0 are returned as is: | ||
|
||
```{r numberToLetter ex2, echo = TRUE} | ||
string <- "806!" | ||
numberToLetter(string) | ||
``` |
Oops, something went wrong.