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