R/checksubstance.R

checksubstance <- function(substance, 
  db = c("cytotox", "enzymes", "ecotox"), 
  experimentator = "%",
  celltype = "%", enzymetype = "%", organism = "%",
  endpoint = "%",
  whereClause = "1", ok= "%")
{
  db = match.arg(db)

  databases <- data.frame(
    responsename = c("viability", "activity", "raw_response"),
    testtype = c("celltype", "enzyme", "organism"),
    exptype = c("plate", "plate", "experiment"),
    row.names = c("cytotox", "enzymes", "ecotox"),
    stringsAsFactors = FALSE)

  con <- dbConnect(odbc(), "cytotox", database = db)

  responsename <- databases[db, 1]
  testtype <- databases[db, 2]
  exptype <- databases[db, 3]

  if (db == "cytotox") {
      type <- celltype
  }
  if (db == "enzymes") {
      type <- enzymetype
  }
  if (db == "ecotox") {
      type <- organism
  }

  query <- paste("SELECT experimentator,substance,",
      testtype, ",", exptype, ",conc,unit,",responsename,",ok",
      " FROM ",db," WHERE substance LIKE '",
      substance,"' AND experimentator LIKE '",
      experimentator,"' AND ",testtype," LIKE '",
      type,"' AND ",
      whereClause," AND ok LIKE '",ok,"'",
              sep = "")

  if (db == "ecotox") {
      query <- paste(query, " AND type LIKE '",
              endpoint, "'", sep = "")
  }

  data <- dbGetQuery(con, query)

  if (length(data$experimentator) < 1) {
      stop(paste("\nNo response data for",substance,"in database",
              db,"found with these parameters\n"))
  }

  data$experimentator <- factor(data$experimentator)
  data$substance <- factor(data$substance)
  substances <- levels(data$substance)
  data$type <- factor(data[[testtype]])
  data[[exptype]] <- factor(data[[exptype]])
  experiments <- levels(data[[exptype]])
  concentrations <- split(data$conc,data$conc)
  concentrations <- as.numeric(names(concentrations))
  data$unit <- factor(data$unit)
  data$ok <- factor(data$ok)

  if (length(experiments)>6) {
      palette(rainbow(length(experiments)))
  }

  plot(log10(data$conc),data[[responsename]],
      xlim=c(-2.5, 4.5),
      ylim= range(data[[responsename]], na.rm = TRUE),
      xlab=paste("decadic logarithm of the concentration in ",levels(data$unit)),
      ylab=responsename)

  explist <- split(data,data[[exptype]])

  for (i in 1:length(explist)) {
      points(log10(explist[[i]]$conc),explist[[i]][[responsename]],col=i);
  }

  legend("topleft", experiments, pch=1, col=1:length(experiments), inset=0.05)
  title(main=paste(substance," - ",levels(data$experimentator)," - ",levels(data$type)))

  exptypename <-  paste(toupper(substring(exptype,1,1)),
      substring(exptype,2), sep = "")
  experimentators <- paste(levels(data$experimentator), collapse = " ")
  types <- paste(levels(data$type), collapse = " ")
  experiments <- paste(levels(data[[exptype]]), collapse = " ")
  class(experiments)
  cat("\n\tSubstanz:\t\t",substance,"\n",
      "\tExperimentator(s):\t", experimentators,"\n",
      "\tType(s): \t\t",types,"\n",
      "\tEndpoint: \t\t",endpoint,"\n",
      "\t", exptypename, "(s):\t\t",experiments,"\n\n", sep = "")
}

Try the drfit package in your browser

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

drfit documentation built on May 2, 2019, 2:31 p.m.