学习R的人,往往一入门就被带进了繁花似锦的统计学世界,慢慢却偏离了编程的道路。这一点和学python的人有显著的区别,加之python的中文资料真的要比R系统的多:
相比之下,R的中文资料:
大部分的R语言的入门书籍都或多或少地炒基本统计学的饭。一个刚入门python的人,如《笨办法学python》肯定是知道python的错误捕获。但是,一个读过三本R语言书籍的人很大概率不知道R语言的错误捕获。
对错误的判断主要利用try()函数
1.将可能会报错的命令行放到try()函数中,并将其赋值到一个变量名fit(可以是任意变量名)中
2.如果有错误,将fit将称为一个类型为“try-error”的变量
3.可以用R ‘try-error’ %in% class(fit)放置在if()函数中进行判断
4.try() 函数一般与next 和 break 进行联用,next跳过本次循环,break跳出循环
ll=list()
ll[1]<-""
for(i in functions("pacman")){
fit<- try(do.call(i,ll))
if('try-error' %in% class(fit)){
next
}else{
print((i))
}
}
tryCatch()函数也可以起到类似的效果
tryCatch(1, finally = print("Hello"))
e <- simpleError("test error")
## Not run:
stop(e)
tryCatch(stop(e), finally = print("Hello"))
tryCatch(stop("fred"), finally = print("Hello"))
## End(Not run)
tryCatch(stop(e), error = function(e) e, finally = print("Hello"))
tryCatch(stop("fred"), error = function(e) e, finally = print("Hello"))
withCallingHandlers({ warning("A"); 1+2 }, warning = function(w) {})
## Not run:
{ withRestarts(stop("A"), abort = function() {}); 1 }
## End(Not run)
withRestarts(invokeRestart("foo", 1, 2), foo = function(x, y) {x + y})
网友评论