《数据科学:R语言实现》——1.10 处理函数中的错误

简介:

本节书摘来自华章出版社《数据科学:R语言实现》一 书中的第1章,第1.10节,作者:R for Data Science Cookbook 丘祐玮(David Chiu),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.10 处理函数中的错误

如果你对现代编程语言比较熟悉,你应该已经在开发过程中,使用try、catch以及block函数解决过可能的错误。R语言在函数中也提供了类似的错误处理方案。因此,你可以在R代码中添加错误处理机制来使程序变得更加健壮。在本教程中,我们会介绍R中基本的错误处理函数。
准备工作
确保你已经在操作系统中安装了R语言,完成了之前的步骤。
实现步骤
执行下列步骤,来处理函数中的错误。

  1. 首先,查看错误信息:
    screenshot

screenshot
screenshot
screenshot
screenshot
screenshot
screenshot

运行原理
类似于其他编程语言,R语言给开发人员提供了一套错误处理机制。然而,R中的错误处理机制是通过函数实现的,而不是通过纯代码块实现的。 这是因为所有的操作都是纯函数调用。
在第1步中,我们展示了给字符串添加一个整数而导致的输出。如果这个操作是非法的,系统会在控制台打印出一条错误消息。R中有3种基本的错误处理消息,分别是error、warning和interrupt。
然后,我们创建了名为addnum的函数,它的作用是返回两个变量的和。然而,有时,你会给函数传递一个意外类型的输入(例如字符串)。此时,我们可以在return语句之前添加一条参数类型检查条件。如果输入数据的类型都不是数值型的,函数stop会调用函数内部的错误消息打印出来。
除了使用函数stop,我们还可以使用函数warning来处理错误。但是,仅仅使用函数warning,函数并不会中断,会继续返回a+b。因此,我们在控制台上,既可以找到错误消息,也可以找到警告消息。为了抑制警告消息,我们可以在函数options中设置warn=2,或者也可以使用函数suppressWarnings来屏蔽所有警告消息 。另外,我们还可以使用函数 stopifnot来检查参数是否合法。如果输入是非法的,我们可以中止程序,并在屏幕上打印出错误消息。
接下来,我们可以使用函数try捕捉错误。这里,我们把字符串赋给了一个整数,这一错误信息会存在errormsg中。但是,函数还是会把错误消息打印到屏幕上。我们可以把参数silent设置为TRUE来屏蔽消息。而且,如果我们不希望一个for循环被意外的错误所打断,函数try是非常有用的。因此,我们首先展示了一个错误是如何意外地中断循环操作的。在这一步中,我们可以看到循环操作停止了,我们仅仅把3个变量成功地指派给了res。事实上,我们也可以把代码封装到函数try中,来继续执行for循环。
除了函数try,我们也可以使用更高级的错误处理函数tryCatch,来处理warning和error。我们通过以下方式使用函数tryCatch:
screenshot

在这个函数中,我们使用不同的代码块来捕捉warning和error消息。依照函数的形式,我们创建了名为dividenum的函数。这个函数首先执行数值除法;不管产生何种错误,我们都可以使用函数error来捕捉错误并打印错误消息。在代码块的底部,我们移除了所有函数中定义的数值,并打印出消息clean variable。此处,我们可以测试一下,在3种不同情况下,函数是如何工作的:执行正常除法,从字符串中分离子字符串,以及只给函数传递一个参数。 现在我们可以看到3种不同条件下的消息输出。在第1种情况下,函数会打印出除法结果,并跟着clean variable。因为clean variable是代码块finally实现的。在第2种情况下,函数首先在代码块error中捕捉了缺失值错误,并在底部输出clean variable。在最后一个情况下,我们并没有捕捉未给参数b传递a值的错误,但是函数依然首先返回了一条错误消息,然后在控制台上打印clean variable。
更多技能
如果你想在使用函数tryCatch的时候捕捉错误信息,可以在函数tryCatch的error参数中放一个conditionMessage:
screenshot

在这个例子中,如果你给函数dividenum传递两个合法的数值参数,函数会返回3/5作为输出。另外,如果你给函数传递一个非数值输入,函数会使用函数conditionMessage来捕捉错误,并输出错误。

目录
打赏
0
0
0
0
1408
分享
相关文章
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
109 3
R语言函数与自定义函数:提高代码的复用性
【8月更文挑战第27天】 自定义函数是R语言编程中不可或缺的一部分,它们通过封装复杂的逻辑和提供灵活的参数化设计,极大地提高了代码的复用性和可维护性。通过掌握自定义函数的基本语法和高级技巧,我们可以编写出更加高效、可读的R语言代码,从而更好地应对复杂的数据分析和统计建模任务。
R语言使用 LOWESS技术图分析逻辑回归中的函数形式
R语言使用 LOWESS技术图分析逻辑回归中的函数形式
|
11月前
|
R语言其他相关函数(各函数解析含实例,可供查询)
R语言其他相关函数(各函数解析含实例,可供查询)
244 0
|
11月前
R语言绘图相关函数(含实例)
R语言绘图相关函数(含实例)
108 0
R语言用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据
R语言用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据
R语言可视化渐近正态性、收敛性:大数定律、中心极限定理、经验累积分布函数
R语言可视化渐近正态性、收敛性:大数定律、中心极限定理、经验累积分布函数
R语言广义二次跳跃、非线性跳跃扩散过程转移函数密度的估计及其应用
R语言广义二次跳跃、非线性跳跃扩散过程转移函数密度的估计及其应用
R语言广义相加(加性)模型(GAMs)与光滑函数可视化
R语言广义相加(加性)模型(GAMs)与光滑函数可视化
R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类
R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等