R语言中的异常处理和eval函数

异常处理tryCatch()

[R]R语言里的异常处理与错误控制
看看下面这个例子就能快速了解。

#这里不要用c(1,2,'a',4), 因为R中向量中的元素必须一致,会自动转换成c("1","2","a","4")。得用list。
#依次取list中的元素,但i='a'时,会报错,执行error函数中的语句,
#而且error仅在出错时执行。但是,无论是否出错,finally中语句一定会执行。
#另外,tryCatch()是一个函数,有返回值,没有报错时返回参数表达式的值,若报错了就返回error函数的值。

for(i in list(1,2,'a',4)){
  result = tryCatch ({
    y = i + 1
    print(paste("y =", y))
    y                    #这里的 y 就是函数tryCatch()的返回值。
  } ,error = function (e) {  #error 是小写的字母。
    print(paste("i =", i, "有错"))
    i = 3
    y = i +1
    print(y)
    "error"        #当i="a"时,执行error中的语句,这里的函数tryCatch()的返回值就是error()函数的返回值,就是这行的字符串“error”,不再是上面的y。
  } , finally = {
    print('finally')
  })
  print(paste("result =", result))
  print("*************\n\n")#不显示换行,可以用cat()
}

结果为:

[1] "y = 2"
[1] "finally"
[1] "result = 2"
[1] "*************\n\n"
[1] "y = 3"
[1] "finally"
[1] "result = 3"
[1] "*************\n\n"
[1] "i = a 有错"
[1] 4
[1] "finally"
[1] "result = error"    #注意这里的tryCatch()的返回值发生变化。
[1] "*************\n\n"
[1] "y = 5"
[1] "finally"
[1] "result = 5"
[1] "*************\n\n"

eval()

可以把字符串转化成表达式来执行。
eval和parse结合使用,参数 text 等于要转化的字符串。

s<- "print('hello world')"
eval(parse(text = s))

向量与列表

向量中没有嵌套结构,如下例所示,系统会把向量中向量自动展开,像python中的extend()。而且,向量中的元素必须是同一类型,否则会自动转换。
但是列表中就不一样,可以保留原来的数据结构,用“[[ ]]”来引用列表中的元素,如list[[1]]表示列表中的第一个元素。

> c(1,2, c(4,5,6))
[1] 1 2 4 5 6 #结果还是一个向量

> list(1,2,c(4,5,6))
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 4 5 6

> l<- list(c(1, 2))
> l[[1]][2]  #引用列表中第一个元素,即一个向量,再引用向量中的第二个元素。
[1] 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值