|  |  |  | @ -101,7 +101,7 @@ numbers2words <- function(x, billion = c("US", "UK"), and = if (billion == "US") | 
		
	
		
			
				|  |  |  |  |    opts <- options(scipen = 100) | 
		
	
		
			
				|  |  |  |  |    on.exit(options(opts)) | 
		
	
		
			
				|  |  |  |  |    ones <- c("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine") | 
		
	
		
			
				|  |  |  |  |    teens <- c("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", " seventeen", "eighteen", "nineteen") | 
		
	
		
			
				|  |  |  |  |    teens <- c("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen") | 
		
	
		
			
				|  |  |  |  |    names(ones) <- names(teens) <- 0:9 | 
		
	
		
			
				|  |  |  |  |    tens <- c("twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety") | 
		
	
		
			
				|  |  |  |  |    names(tens) <- 2:9 | 
		
	
	
		
			
				
					|  |  |  | @ -113,3 +113,61 @@ numbers2words <- function(x, billion = c("US", "UK"), and = if (billion == "US") | 
		
	
		
			
				|  |  |  |  |    x <- round(x) | 
		
	
		
			
				|  |  |  |  |    if (length(x) > 1) sapply(x, helper) else helper(x) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #' numbers2swedish | 
		
	
		
			
				|  |  |  |  | #' | 
		
	
		
			
				|  |  |  |  | #' Converts a number into its corresponding words in Swedish | 
		
	
		
			
				|  |  |  |  | #' This is my own adaptation of numbers2words() | 
		
	
		
			
				|  |  |  |  | #' I think an even neater solution would be to have an argument | 
		
	
		
			
				|  |  |  |  | #' numbers2words(lang = "swe"), but that would require more coding | 
		
	
		
			
				|  |  |  |  | #' THIS FUNCTION NEEDS WORK | 
		
	
		
			
				|  |  |  |  | #' Cannot return proper grammar: "en miljon" and "ett tusen", or | 
		
	
		
			
				|  |  |  |  | #' "en miljon" and "två miljoner", and so on. | 
		
	
		
			
				|  |  |  |  | #' | 
		
	
		
			
				|  |  |  |  | #' @param x         number | 
		
	
		
			
				|  |  |  |  | #' | 
		
	
		
			
				|  |  |  |  | #' @return string | 
		
	
		
			
				|  |  |  |  | #' @export | 
		
	
		
			
				|  |  |  |  | numbers2swedish <- function(x) { | 
		
	
		
			
				|  |  |  |  |    and <- "" | 
		
	
		
			
				|  |  |  |  |    trim <- function(text) { | 
		
	
		
			
				|  |  |  |  |       gsub("(^\ *)|((\ *|-|,\ noll|-noll)$)", "", text) | 
		
	
		
			
				|  |  |  |  |    } | 
		
	
		
			
				|  |  |  |  |    makeNumber <- function(x) as.numeric(paste(x, collapse = "")) | 
		
	
		
			
				|  |  |  |  |    makeDigits <- function(x) strsplit(as.character(x), "")[[1]] | 
		
	
		
			
				|  |  |  |  |    helper <- function(x) { | 
		
	
		
			
				|  |  |  |  |       negative <- x < 0 | 
		
	
		
			
				|  |  |  |  |       x <- abs(x) | 
		
	
		
			
				|  |  |  |  |       digits <- makeDigits(x) | 
		
	
		
			
				|  |  |  |  |       nDigits <- length(digits) | 
		
	
		
			
				|  |  |  |  |       result <- if (nDigits == 1) as.vector(ones[digits]) | 
		
	
		
			
				|  |  |  |  |       else if (nDigits == 2) | 
		
	
		
			
				|  |  |  |  |          if (x <= 19) as.vector(teens[digits[2]]) | 
		
	
		
			
				|  |  |  |  |       else trim(paste(tens[digits[1]], "-", ones[digits[2]], sep="")) | 
		
	
		
			
				|  |  |  |  |       else if (nDigits == 3) { | 
		
	
		
			
				|  |  |  |  |          tail <- makeNumber(digits[2:3]) | 
		
	
		
			
				|  |  |  |  |          if (tail == 0) paste(ones[digits[1]], "hundra") | 
		
	
		
			
				|  |  |  |  |          else trim(paste(ones[digits[1]], trim(paste("hundra", and)), | 
		
	
		
			
				|  |  |  |  |                          helper(tail))) | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  |          nSuffix <- ((nDigits + 2) %/% 3) - 1 | 
		
	
		
			
				|  |  |  |  |          if (nSuffix > length(suffixes) || nDigits > 15) | 
		
	
		
			
				|  |  |  |  |             stop(paste(x, "is too large!")) | 
		
	
		
			
				|  |  |  |  |          pick <- 1:(nDigits - 3 * nSuffix) | 
		
	
		
			
				|  |  |  |  |          trim(paste(helper(makeNumber(digits[pick])), suffixes[nSuffix], helper(makeNumber(digits[-pick])))) | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       if (negative) paste("minus", result) else result | 
		
	
		
			
				|  |  |  |  |    } | 
		
	
		
			
				|  |  |  |  |    opts <- options(scipen = 100) | 
		
	
		
			
				|  |  |  |  |    on.exit(options(opts)) | 
		
	
		
			
				|  |  |  |  |    ones <- c("noll", "ett", "tv\U00E5", "tre", "fyra", "fem", "sex", "sju", "\U00E5tta", "nio") | 
		
	
		
			
				|  |  |  |  |    teens <- c("tio", "elva", "tolv", "tretton", "fjorton", "femton", "sexton", "sjutton", "arton", "nitton") | 
		
	
		
			
				|  |  |  |  |    names(ones) <- names(teens) <- 0:9 | 
		
	
		
			
				|  |  |  |  |    tens <- c("tjugo", "trettio", "fyrtio", "femtio", "sextio", "sjuttio", "\U00E5ttio", "nittio") | 
		
	
		
			
				|  |  |  |  |    names(tens) <- 2:9 | 
		
	
		
			
				|  |  |  |  |    # https://sv.wikipedia.org/wiki/Namn_p%C3%A5_stora_tal | 
		
	
		
			
				|  |  |  |  |    suffixes <- c("tusen,", "miljoner,", "miljarder,", "biljoner,") | 
		
	
		
			
				|  |  |  |  |    x <- round(x) | 
		
	
		
			
				|  |  |  |  |    if (length(x) > 1) sapply(x, helper) else helper(x) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
	
		
			
				
					|  |  |  | 
 |