Advanced Debugging
Purpose
To deep practice R- Topic chosen in Debug
Example 1: Complex processing, don’t want to modify code. traceback(),
error=recover().
> options(stringsAsFactors = FALSE) > library(plyr) > setwd("C:/Cauldron/garage/R/soulcraft/Volatility/Learn/DeepPractice/Debug") > all.dat <- read.csv("piratical_dat.csv") > dat.test <- head(all.dat) > process.complexiously <- function(df, arg1 = 0.12, arg2 = function(x, + q = arg1) ifelse(x < q, x, q + 2), stuff = 0) { + do <- sum(stuff) + other <- rep(arg1, 44) + do <- sum(other, stuff) + df2 <- ddply(df, .(rx), transform, wacky.sum = dzyhapi + + qwexinox + 7) + more.wackiness(df2) + } > more.wackiness <- function(df) { + for (i in 1:(nrow(df) * 0.95)) { + df[i, "wacky.sum"] <- df[i, "wacky.sum"] + sum(df[, df[i, + "rx"]]) + } + df + } > options(width = 80) > process.complexiously(dat.test) rx dzyhapi qqrvibe.AB aarvbyol prlylyfe ytrwow zorncat qwexinox 1 aarvbyol 0.92 0.78 0.98 0.36 0.95 0.53 0.53 2 dzyhapi 0.66 0.58 0.53 0.09 0.99 0.45 0.49 3 prlylyfe 0.35 0.82 0.14 0.37 0.57 0.50 0.92 4 qqrvibe.AB 0.14 0.32 0.21 0.16 0.12 0.18 0.63 5 ytrwow 0.60 0.16 0.51 0.25 0.49 0.50 0.41 6 zorncat 0.13 0.09 0.44 0.35 0.20 0.89 0.72 xyxyslim axyzoz.XL poyqwr wacky.sum 1 0.37 0.69 0.77 11.26 2 0.06 0.92 0.15 10.95 3 0.10 0.59 0.62 9.85 4 0.59 0.50 0.84 10.52 5 0.91 0.04 0.22 11.33 6 0.31 0.52 0.73 7.85 > tryCatch(process.complexiously(all.dat), error = function(e) { + print("Moron, there is an error") + }) [1] "Moron, there is an error" |
Use Debug on the function
> cats.test <- data.frame(cat = c("fluffy", "spot", "tiger", "baby", + "garth", "felix"), height = c(15, 9, 22, 11, 12, 9), weight = c(6, + 5, 14, 9, 4, 5), rx = c("dzyhapi", "qqrvibe AB", "xyxyslim", + "ytrwow", "prlylyfe", "dzyhapi")) > rxs.test <- data.frame(rx = c("dzyhapi", "qqrvibe AB", "aarvbyol", + "prlylyfe", "ytrwow", "zorncat", "qwexinox", "ytrwow", "xyxyslim", + "axyzoz XL", "poyqwr"), loss = c(0.04, 0.13, 0.02, 0.04, + 0.06, 0.1, 0.09, 0.04, 0.01, 0.05, 0.05)) > do.tricky.thing <- function(pets, meds, sd = 0.03) { + merged.test <- merge(pets, meds, by = "rx") + sim.result <- with(merged.test, loss + rnorm(length(loss), + mean = 0, sd = sd)) + ret <- pets + ret$exp.profit <- sim.result + ret + } |
Example 3: Debugging when there’s no error. Conditional breakpoints.
> rxs.test <- data.frame(rx = c("dzyhapi", "qqrvibe AB", "aarvbyol", + "prlylyfe", "ytrwow", "zorncat", "qwexinox", "xyxyslim", + "axyzoz XL", "poyqwr"), loss = c(0.04, 0.13, 0.02, 0.04, + 0.06, 0.1, 0.09, 0.01, 0.05, 0.05)) > exps.test <- data.frame(rx = c("dzyhapi", "dzyhapi", "dzyhapi", + "prlylyfe", "qqrvibe AB", "qqrvibe AB", "qqrvibe AB", "xyxyslim", + "xyxyslim", "xyxyslim", "xyxyslim", "ytrwow", "ytrwow"), + Ns = c(15, 30, 36, 16, 26, 36, 42, 44, 20, 24, 19, 32, 29)) > do.trickier.thing <- function(meds, exps, resample.n = 1000) { + merged <- merge(exps, meds, by = "rx") + meaning.less <- ddply(merged, .(rx), function(df) { + data.frame(asdf = mean(sample(df$Ns, resample.n, replace = TRUE)) + + max(df$loss)) + }) + meaning.less + } |
You can control the place the trace is invoked
You can control the time the trace is browse is invoked using quote argument