R/Class-Taxonomy.R

setClass("Taxonomy",
	representation(
	data = "data.frame")
)

setValidity("Taxonomy",
	method = function (object) {
		if (ncol(object@data) < 2) {
			FALSE
		} else {
			TRUE
		}
		if (identical(names(object@data)[1:2],
			c("abbr", "taxon"))) {
			TRUE	
		} else {
			FALSE
		}		
	}
)

setMethod("initialize",
	"Taxonomy",
	function(.Object, data) {
		#	for safety and to ensure validity
		#	as.matrix has effect if abbr is numeric
		data <- as.data.frame(as.matrix(data), stringsAsFactors = FALSE)
		#	data <- as.data.frame(data, stringsAsFactors = FALSE)

		#	bring columns into order		
		if (dim(data)[2] > 2) {
 			sel.abbr.taxon <- match(c("abbr", "taxon"), names(data))
			sel <- 1:length(names(data))
			data <- data[c(sel[sel.abbr.taxon], sel[-sel.abbr.taxon])]
		} else {
			names(data)[1:2] <- c("abbr", "taxon")
		}
		stopifnot(length(unique(data$abbr)) == nrow(data))
		#	valid strings
		data$abbr <- make.names(data$abbr)
		#	alphabetic order
		data <- data[order(data$abbr), ]		
		#	ensure valid namesand promote rownames
		row.names(data) <- data$abbr <- make.names(data$abbr)

	.Object@data <- data	
	return(invisible(.Object))	
	}
)

Try the vegsoup package in your browser

Any scripts or data that you put into this service are public.

vegsoup documentation built on Feb. 24, 2021, 3 a.m.