R语言 防御性编程

R语言 防御性编程

防御性编程是一种软件开发实践,包括以预测和防止错误和漏洞的方式设计和实现代码。在R编程中,防御性编程涉及使用技术和策略来确保你的R代码是稳健、可靠和安全的。

通过防御性编程中的 “防御性 “一词,你们中的大多数人可能会感到困惑,它是否意味着编写这样的代码不会失败。但是,”防御性编程 “的实际定义是编写这样的代码,使其正确失败。通过 “正确地失败”,我们的意思是

  • 如果代码失败了,那么如果有一些操作,它应该能够立即失败,而且对它们进行操作的成本相当高。

  • 如果代码失败,那么它应该能够能够释放所有的资源,并且不写任何文件,等等。

  • 如果代码失败,那么它应该显示一个带有适当描述的错误信息。

  • 如果代码失败了,那么就应该妥善处理。作为一名开发人员,你需要对其进行调试,或对其有更多的了解。

防御性R编程技术

现在我们将讨论属于防御性R编程的各种技术:

诊断信息

语法

R允许我们使用message()函数,我们可以用它在控制台显示诊断信息。这个函数的语法如下。

message(diagonostic_message)

这里的 diagnostic_message 是你想显示的信息。

示例

现在让我们考虑一下下面给出的程序:

# Defining myFunction()
myFunction <- function() {

   # Diagnostic message
   message("You need to run system updates!")

   # Doing some work
   number1 = 10
   number2 = 20
   sum = number1 + number2
}

# Calling function
myFunction()

输出

You need to run system updates!

正如你在输出中看到的,信息已经显示在控制台。

示例

我们也可以手动定义verbosity,使其成为一个特定的软件或程序的丰富功能,如–

# Defining myFunction()
myFunction <- function(verbose) {

   # Diagnostic message
   if(verbose)
   message("You need to run system updates!")

   # Doing some work
   number1 = 10
   number2 = 20
   sum = number1 + number2
}

# Calling function
myFunction(verbose = TRUE)

输出

You need to run system updates!

正如你在输出中看到的,信息已经显示在控制台。

语法

值得注意的是,有时我们需要在程序中抑制恼人的信息。为此,R为我们提供了suppressMessages()函数,该函数的语法如下

suppressMessages(func())

示例

这里func()是声明信息的函数。

# Defining myFunction()
myFunction <- function() {

   # Diagnostic message
   message("You need to run system updates!")

   # Doing some work
   number1 = 10
   number2 = 20
   sum = number1 + number2

   # Display the sum
   print(sum)
}

# Suppress message
suppressMessages(myFunction())

输出

[1] 30

正如你在输出中看到的,信息已经显示在控制台。

警告信息

语法

程序中的警告信息是用来突出潜在的问题。R为我们提供了warning()函数,使用该函数我们可以在控制台显示警告信息,以便更好地进行防御性编程。这个函数的语法如下。

warning(warning_message)

这里 warning_message 是要显示的信息。

示例

现在让我们考虑下面的一个程序–

# Defining myFunction()
myFunction <- function() {

   # Diagnostic message
   warning("Something wrong might happen in you code!")

   # Doing some work
   number1 = 10
   number2 = 20
   sum = number1 + number2
}

# Calling function
myFunction()

输出

Warning message:
In myFunction() : Something wrong might happen in you code!

正如你在输出中看到的,警告信息已经显示在控制台。

错误信息

语法

当我们的代码失败并发生错误时,在这种情况下我们应该将错误信息打印到控制台。为此,R为我们提供了error()函数。这个函数的语法如下。

error(error_message)

这里error_message是要显示的错误信息。

示例

现在请看下面的程序,演示stop()函数的工作。

# Defining myFunction()
myFunction <- function() {

   # Diagnostic message
   stop("Something wrong has happened in your code!")

   # Doing some work
   number1 = 10
   number2 = 20
   sum = number1 + number2
}

# Calling function
myFunction()

输出

Error in myFunction() : Something wrong has happened in your code!

正如你在输出中看到的,错误信息已经显示在控制台。

用stopifnot()检查条件

示例

我们在这篇文章中已经讨论过,我们可以使用stop()函数在R中创建一个错误。现在让我们考虑一个程序,检查一个向量是否持有字符类型的值。

# Creating a vector
   myVector <- 100

   # Check whether the vector hold character value
   # If not print error to console
   # using stop() function
   if (!is.character(myVector)) {
      stop("Error found! myVector must be a character vector.")
   }

输出

Error: Error found! myVector must be a character vector.

正如你在输出中看到的,错误信息已经显示在控制台。

上述程序的缺点是,如果我们有多个条件需要评估,那么可能需要很多行代码来检查所有条件,因此不必要地增加了程序的代码量。

语法

R为我们提供了stopifnot()函数,我们可以用它来处理多个条件。这个函数的语法如下。

stopifnot(condition)

该函数接受条件作为参数,并返回一个布尔值和相应的错误信息(如果在传递的条件中存在一些错误。

示例

让我们考虑一个演示该函数工作的例子–

# Creating a vector
myVector <- 100

# Check whether vector hold character value
# If not print error to console
# using stop() function
stopifnot(is.character(myVector))

输出

Error: is.character(myVector) is not TRUE

正如你在输出中看到的那样,由于myVector包含整数值,因此在控制台显示了错误信息。

写作测试

在R语言中,我们有assertthat包,可用于测试。如果你还没有安装这个包,你可以在R中使用下面的命令,用CRAN安装这个包——。

install.packages("assertthat")

语法

assertthat包为我们提供了assert_that()函数,我们可以用它来测试任何逻辑语句。这个函数的语法如下 –

assert_that(condition)

它接受一个逻辑条件作为参数

示例

# Importing library
library(assertthat)

# Defining two integer variables
number1 = 100
number2 = 150

# Make sure that number1 is greater than number2
assert_that(number1 > number2)

输出

Error: number1 not greater than number2

正如你在输出中看到的那样,由于数字1小于数字2,因此错误信息显示在控制台。

语法

assert_that()函数也可用于比较两个向量的值,但其语法与上面的略有不同

assert_that(all(condition))

它接受一个逻辑条件作为参数。

示例

# Importing library
library(assertthat)

# Defining two vectors of integer type
vector1 <- c(10, 20, 30, 40)
vector2 <- c(50, 60, 70, 80)

# Make sure that all the elements 
# of vector1 are lesser than the
# corresponding elements of vector2
assert_that(all(vector1 < vector2))

输出

[1] TRUE

结论

在本教程中,我们讨论了R中的各种防御性编程技术。我希望这能帮助你加强你在数据科学领域的知识。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程