View source: R/chapters-auto.R
ch10 | R Documentation |
To print a listing of all examples of a chapter, use ch10()
.
To run all the examples of ch10()
, use example(ch10)
.
ch10()
toc
Other Chapters:
ch01()
,
ch02()
,
ch03()
,
ch04()
,
ch05()
,
ch06()
,
ch07()
,
ch08()
,
ch09()
,
ch11()
,
ch12()
,
ch13()
,
ch14()
,
ch15()
,
ch16()
,
ch17()
,
ch18()
,
ch19()
,
ch20()
if (interactive()) { # Chapter 10 # Debugging Your Code # NOTE : Much code is commented out, as they generate # errors on purpose. Uncomment the code and run the # line to see the error and try the debugging out # Knowing What to Look For # Reading Errors and Warnings ## Reading error messages # "a" + 1 # Error in "a" + 1 : non-numeric argument to binary operator # data.frame(1:10,10:1,) # Error in data.frame(1:10, 10:1, ) : argument is missing, with no default ## Caring about warnings (or not) x <- 1:10 #y <- if (x < 5 ) 0 else 1 x <- 4 #sqrt(x - 5) plot(1:10, 10:1, col='green') # Going Bug Hunting ## Calculating the logit # checks input and does logit calculation logit <- function(x){ x <- ifelse(x < 0 | x > 1, "NA", x) log(x / (1 - x) ) } # transforms percentage to number and calls logit logitpercent <- function(x){ x <- gsub("%", "", x) logit(as.numeric(x)) } ## Knowing where an error comes from # logitpercent('50%') # Error in 1 - x : non-numeric argument to binary operator # traceback() ## Looking inside a function ### Telling R which function to debug # debug(logit) # logitpercent('50%') ### Stepping through the function ### Start browsing from within the function logit <- function(x){ x <- ifelse(x < 0 | x > 1, "NA", x) browser() log(x / (1 - x) ) } # logit(50) # Generating Your Own Messages ## Creating errors logit <- function(x){ if( any(x < 0 | x > 1) ) stop('x not between 0 and 1') log(x / (1 - x) ) } # logitpercent(c('50%','150%')) # Error in logit(as.numeric(x)/100) : x not between 0 and 1 ## Creating warnings # Function wrapped around for illustrative purposes # In book only body is given logit <- function(x){ x <- ifelse(x < 0 | x > 1, NA, x ) if( any(is.na(x)) ) warning('x not between 0 and 1') log(x / (1 - x) ) } # logitpercent(c('50%','150%')) # throws error # Recognizing the Mistakes You're Sure to Make ## Starting with the wrong data ## Having your data in the wrong format ### Dropping dimensions when you don't expect it rowsum.df <- function(x){ id <- sapply(x,is.numeric) rowSums(x[, id]) } # rowsum.df(sleep) ### Messing up with lists strsplit('this is a sentence',' ')[2] strsplit('this is a sentence',' ') strsplit('this is a sentence',' ')[[1]][2] customer <- c('Johan Delong','Marie Petit') namesplit <- strsplit(customer,' ') paste(namesplit[2],collapse='.') paste(namesplit[[2]],collapse='.') ### Mixing up factors and numeric vectors cyl.factor <- as.factor(mtcars$cyl) median(as.numeric(cyl.factor)) as.numeric(levels(cyl.factor))[cyl.factor] }
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.