有时候会有特别的情况,比如每到某一个地方就报错NAs are not allowed.可是这里本来不应该有NA啊。这时候你可以在这个前面放置browser().每到这里,R就会暂停,提示你测试一下周围环境是不是你需要的,在这里你也可以给一些其他的输入。比如每次我输入a<-5这里就出现NA,我可以零时输入a<- 6看看什么结果。不过具体情况具体分析。browser还可以在出错时停止,所以就不会每次有错没错都停在那里等你。还有一些东西也是很有用,比如R默认在运行中会把所有的Warnings保存下来,最后程序结束了才提示超过50的警告,不过黄花菜也凉了,可以在程序运行前加一句options(warn=1),你可以写在Main.R的第二行,(第一行写rm(list=ls()))这样一旦有警告,就会print出来,这样心中有数了。
总结一下. debug是一个比较系统的过程,不是最后那一两次调试才叫作debug.基于“出来混的,终究是要还的”,我还是比较建议从一开始写良好的编程习惯,这样有利于检查问题。比如在写之前就声明输入的类型,N x P的矩阵还是 P x 1的,矩阵还是其他的,输出是什么东西。不要一边写一边想加个张三就加个张三,想加个李四就加个李四,这样会越来越乱。。变量命名不要嫌长,最好好能说明功能,比如 KStepNewtonDimMov for "K-step Newton Dimension Move". 注意代码缩进。for loop如果很长,超过一个屏幕,应该写成这样:
for(i in 1:100)
{
## long code
} # for (i in 1:100)
个人经验,这些可以对付一般的问题了,其他的只能google了。更多的大家可以help.search("debug")。