Something’s Wrong!

Indications that something’s not right

message: A generic notification/diagnostic message produced by the message function;execution of the function continues

warning: An indication that something is wrong but not necessarily fatal; execution of thefunction continues; generated by the warning function

error: An indication that a fatal problem has occurred; execution stops; produced by the stop function

condition: A generic concept for indicating that something unexpected can occur; programmers can create their own conditions

How do you know that something is wrong with your function?

What was your input?

How did you call the function?

What were you expecting? Output, messages, other results?

What did you get?

How does what you get differ from what you were expecting?

Were your expectations correct in the first place?

Can you reproduce the problem (exactly)?

Debugging Tools in R

The primary tools for debugging functions in R are:

traceback: prints out the function call stack after an error occurs; does nothing if there’s no error

debug: flags a function for “debug” mode which allows you to step through execution of a function one line at a time

browser: suspends the execution of a function wherever it is called and puts the function in debug mode

trace: allows you to insert debugging code into a function a specific places

recover: allows you to modify the error behavior so that you can browse the function call stack

These are interactive tools specifically designed to allow you to pick through a function. There’s also the more blunt technique of inserting print/cat statements in the function.

traceback

> lm(y ~ x)

Error in eval(expr, envir, enclos) : object ’y’ not found

> traceback()

7: eval(expr, envir, enclos)

6: eval(predvars, data, env)

5: model.frame.default(formula = y ~ x, drop.unused.levels = TRUE)

4: model.frame(formula = y ~ x, drop.unused.levels = TRUE)

3: eval(expr, envir, enclos)

2: eval(mf, parent.frame())

1: lm(y ~ x)

debug

> debug(lm)

> lm(y ~ x)

debugging in: lm(y ~ x)

debug: {

ret.x <- x

ret.y <- y

cl <- match.call()

...

if (!qr)

z$qr <- NULL

z

}

Browse[

2]>

Browse[2]> n

debug: ret.x <- x

Browse[2]> n

debug: ret.y <- y

Browse[2]> n

debug: cl <- match.call()

Browse[2]> n

debug: mf <- match.call(expand.dots = FALSE)

Browse[2]> n

debug: m <- match(c("formula", "data", "subset", "weights", "na.action",

"offset"), names(mf), 0L)

recover

> options(error = recover)

> read.csv("nosuchfile")

Error in file(file, "rt") : cannot open the connection

In addition: Warning message:

In file(file, "rt") :

cannot open file ’nosuchfile’: No such file or directory

Enter a frame number, or 0 to exit

1: read.csv("nosuchfile")

2: read.table(file = file, header = header, sep = sep, quote = quote, dec =

3: file(file, "rt")

Selection:

Summary

There are three main indications of a problem/condition: message, warning, error- only an error is fatal

When analyzing a function with a problem, make sure you can reproduce the problem, clearly state your expectations and how the output differs from your expectation

Interactive debugging tools traceback, debug, browser, trace, and recover can be used to find problematic code in functions

Debugging tools are not a substitute for thinking!

欢迎关注:

R Programming week 3-Debugging的更多相关文章

  1. Coursera系列-R Programming第二周

    博客总目录,记录学习R与数据分析的一切:http://www.cnblogs.com/weibaar/p/4507801.html  --- 好久没发博客 且容我大吼一句 终于做完这周R Progra ...

  2. Coursera系列-R Programming第三周-词法作用域

    完成R Programming第三周 这周作业有点绕,更多地是通过一个缓存逆矩阵的案例,向我们示范[词法作用域 Lexical Scopping]的功效.但是作业里给出的函数有点绕口,花费了我们蛮多心 ...

  3. 让reddit/r/programming炸锅的一个帖子,还是挺有意思的

    这是原帖 http://www.reddit.com/r/programming/comments/358tnp/five_programming_problems_every_software_en ...

  4. [R] [Johns Hopkins] R Programming -- week 3

    library(datasets) head(airquality) #按月分組 s <- split(airquality, airquality$Month) str(s) summary( ...

  5. [R] [Johns Hopkins] R Programming 作業 Week 2 - Air Pollution

    Introduction For this first programming assignment you will write three functions that are meant to ...

  6. R Programming week 3-Loop functions

    Looping on the Command Line Writing for, while loops is useful when programming but not particularly ...

  7. R programming, In ks.test(x, y) : p-value will be approximate in the presence of ties

    Warning message: In ks.test(x, y) : p-value will be approximate in the presence of ties   The warnin ...

  8. [R] [Johns Hopkins] R Programming -- week 4

    #Generating normal distribution (Pseudo) random number x<-rnorm(10) x x2<-rnorm(10,2,1) x2 set ...

  9. R Programming week2 Functions and Scoping Rules

    A Diversion on Binding Values to Symbol When R tries to bind a value to a symbol,it searches through ...

随机推荐

  1. [IT新应用]brave浏览器

    https://www.brave.com/about.html The web has become a different place. With the ad-tech ecosystem ou ...

  2. Linux上ln命令详细说明及软链接和硬链接的区别

    硬链接(hard link) UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接.它可以使得单个程序对同一文件使用不同的名字.这样的好处是文件系 统只存在一个文件的副本, ...

  3. /dev/zero和/dev/null的区别

    http://www.cnblogs.com/jacktu/archive/2010/06/28/1766791.html /dev/zero和/dev/null的区别   使用/dev/null 把 ...

  4. Oracle - 数据更新 - 增删改

    /* 数据的更新 增加 删除 修改 */ -----------------------------------增加(一次只能插入一条数据) --自定义插入数据列的顺序 ,,); --按照数据库默认的 ...

  5. Database Firewall——mysql也是支持的

    Database Firewall The most impressive feature of MySQL security is the Database Firewall. The firewa ...

  6. 数据库sqlite3的使用-Navicat的安装

    一:Navicat Navicat是一款著名的数据库管理软件,支持大部分主流数据库(包括SQLite) 1.Navicat的安装 (1)下载该软件后,先打开该软件 (2)把文件拖入到应用程序拷贝 (3 ...

  7. 并不对劲的图论专题(三):SPFA算法的优化

    1.bzoj1489-> 这是个新套路. 我们希望找到最小的x,那么可以二分x,然后判断是否存在圈的边权的平均值小于等于x. 设圈的边权依次为w1,w2,w3,…,wk,平均值为p, 则有p= ...

  8. 第十七周 Leetcode 403. Frog Jump(HARD) 线性dp

    leetcode403 我们维护青蛙从某个石头上可以跳那些长度的距离即可 用平衡树维护. 总的复杂度O(n^2logn) class Solution { public: bool canCross( ...

  9. win10解决vc++6.0不兼容问题方法

    这个方法我是可以用了 所以就写在着勒... 1 这个是百度云链接 先下载这个东西 放在电脑上 http://pan.baidu.com/s/1c2MihLA(一个MSDEV.EXE) 2然后找到这个目 ...

  10. c语言struct和c++的class的暧昧

    c语言风格的封装 数据放在一起,以引用和指针的方式传给行为c++ 认为封装不彻底 1数据和行为分开 对外提供接口 2没有权限设置 看看struct的一个例子 //data.h //c语言风格的封装 数 ...