Section 11 Debugging R Code: Exercise

11.1 Exercise 1

set.seed(123)

ID <- paste0('S',1:6)
Sex <- sample(x = c('M','F'), size = length(ID), replace = TRUE)
Ht1 <- sample(45:55, size = length(ID), replace = FALSE)
Ht2 <- sample(60:70, size = length(ID), replace = TRUE)
Ht3 <- sample(75:85, size = length(ID), replace = TRUE)

Ht <- c(Ht1, Ht2, Ht3)
Age <- rep(c('A1','A2','A3'), each=2)

DF <- data.frame(ID=ID, Sex=Sex, Age=Age, Ht=Ht, stringsAsFactors = TRUE)


# Function

fn <- function(x, dat){
    mean(dat[,x], na.rm=TRUE)
}


# Execute the function

debug(fn)

fn(x=4, dat=DF)

fn(x=3, dat=DF)


11.2 Exercise 2

set.seed(123)

ID <- paste0('S',1:6)
Sex <- sample(x = c('M','F'), size = length(ID), replace = TRUE)
Ht1 <- sample(45:55, size = length(ID), replace = FALSE)
Ht2 <- sample(60:70, size = length(ID), replace = TRUE)
Ht3 <- sample(75:85, size = length(ID), replace = TRUE)

Ht <- c(Ht1, Ht2, Ht3)
Age <- rep(c('A1','A2','A3'), each=2)

DF <- data.frame(ID=ID, Sex=Sex, Age=Age, Ht=Ht, stringsAsFactors = TRUE)


# Function

fn <- function(x, dat){
  mean(as.numeric(dat[,x]), na.rm=TRUE)
}

debug(fn)

fn(x=4, dat=DF)

fn(x=3, dat=DF)


11.3 Exercise 3

fnDisp <- function(x, ...){
  
  n1 <- length(x)
  n2 <- sum(!is.na(x))
  
  x.am <- sum(x, ...) / n2
  x.var <- sum(x - x.am, ...)^2 / (n2-1) 
  
  x.sd <- sqrt(x.var)
  
  Disp <- list(N=n1, N_excl_NA=n2, 
               Var=x.var, SD=x.sd)
  
  return(Disp)
}


Z <- c(1:5,NA,6:10)

fnDisp(x=Z, na.rm=TRUE)

var(Z, na.rm=TRUE)
sd(Z, na.rm=TRUE)

debug(fnDisp)


11.4 Exercise 4

fn.colMeans <- function(dat, colNames){
  xmeans <- vector(mode = 'numeric', length = length(colNames))
  names(xmeans) <- colNames
  for(x in colNames){
    xmeans[x] <- mean(dat[x,], na.rm=TRUE)
  }
  return(xmeans)
}

cars <- read.csv('cars.csv')

cNames <- c('mpg', 'cyl', 'disp', 'hp', 'drat', 'wt', 'qsec', 'carb')

fn.colMeans(dat=cars, cNames)


11.5 Exercise 5

cars <- read.csv(file='cars.csv')

str(cars)

fm <- lm(mpg ~ factor(am), data=cars)

summary(fm)


# Debug R function t.test

debugonce(t.test)

rst_ttest <- t.test(mpg ~ factor(am), data=cars)



# Debug R function: lm

debugonce(lm)

fm <- lm(mpg ~ factor(am), data=cars)


# options(error = recover) # setting the error option