📜  R 编程中的函数

📅  最后修改于: 2022-05-13 01:54:21.745000             🧑  作者: Mango

R 编程中的函数

当您想要多次执行某个任务时,函数很有用。函数接受输入参数并通过执行函数内部的有效 R 命令产生输出。在 R 编程语言中,当您创建函数时,函数名称和创建函数的文件不必相同,您可以在单个 R 文件中拥有一个或多个函数定义。

R语言中的函数类型

  • 内置函数:内置函数R是sq()、mean()、max(),这些函数是用户在程序中直接调用的。
  • 用户自定义函数: R语言允许我们编写自己的函数。

R语言中的函数

通过使用命令函数()在 R 中创建函数。函数文件的一般结构如下:

注意:在上面的语法中 f 是函数名,这意味着你正在创建一个名为 f 的函数,它接受某些参数并执行以下语句。

R 编程语言中的内置函数

在这里,我们将使用内置函数,如 sum()、max() 和 min()。

R
# Find sum of numbers 4 to 6.
print(sum(4:6))
 
# Find max of numbers 4 and 6.
print(max(4:6))
 
# Find min of numbers 4 and 6.
print(min(4:6))


R
# A simple R function to check
# whether x is even or odd
 
evenOdd = function(x){
  if(x %% 2 == 0)
    return("even")
  else
    return("odd")
}
 
print(evenOdd(4))
print(evenOdd(3))


R
# A simple R function to calculate
# area of a circle
 
areaOfCircle = function(radius){
  area = pi*radius^2
  return(area)
}
 
print(areaOfCircle(2))


R
# A simple R function to calculate
# area and perimeter of a rectangle
 
Rectangle = function(length, width){
  area = length * width
  perimeter = 2 * (length + width)
   
  # create an object called result which is
  # a list of area and perimeter
  result = list("Area" = area, "Perimeter" = perimeter)
  return(result)
}
 
resultList = Rectangle(2, 3)
print(resultList["Area"])
print(resultList["Perimeter"])


R
# A simple R program to
# demonstrate the inline function
 
 
f = function(x) x^2*4+x/3
 
print(f(4))
print(f(-2))
print(0)


R
# A simple R program to demonstrate
# passing arguments to a function
 
Rectangle = function(length=5, width=4){
  area = length * width
  return(area)
}
 
# Case 1:
print(Rectangle(2, 3))
 
# Case 2:
print(Rectangle(width = 8, length = 4))
 
# Case 3:
print(Rectangle())


R
# A simple R program to demonstrate
# Lazy evaluations of functions
 
Cylinder = function(diameter, length, radius ){
  volume = pi*diameter^2*length/4
  return(volume)
}
 
# This'll execute because this
# radius is not used in the
# calculations inside the function.
print(Cylinder(5, 10))


R
# A simple R program to demonstrate
# Lazy evaluations of functions
 
Cylinder = function(diameter, length, radius ){
  volume = pi*diameter^2*length/4
  print(radius)
  return(volume)
}
 
# This'll throw an error
print(Cylinder(5, 10))


输出:

[1] 15
[1] 6
[1] 4

R 编程语言中的用户定义函数

R 提供了诸如print()cat()等内置函数,但我们也可以创建自己的函数。这些函数称为用户定义函数。

示例

R

# A simple R function to check
# whether x is even or odd
 
evenOdd = function(x){
  if(x %% 2 == 0)
    return("even")
  else
    return("odd")
}
 
print(evenOdd(4))
print(evenOdd(3))

输出:

[1] "even"
[1] "odd"

单输入单输出

现在在 R 中创建一个函数,它将接受一个输入并给我们一个输出。

以下是创建一个函数的示例,该函数计算以半径为参数的圆的面积。因此,要创建一个函数,请将函数命名为“areaOfCircle”,需要传递的参数是圆的“半径”。

R

# A simple R function to calculate
# area of a circle
 
areaOfCircle = function(radius){
  area = pi*radius^2
  return(area)
}
 
print(areaOfCircle(2))

输出:

12.56637

多输入多输出

现在用 R 语言创建一个函数,它将接受多个输入并使用列表为我们提供多个输出。

R 语言中的函数接受多个输入对象,但仅返回一个对象作为输出,但这不是限制,因为您可以创建要创建的所有输出的列表,一旦创建列表,您就可以访问它们列表的元素并获得您想要的答案。

让我们考虑这个例子来创建一个函数“Rectangle”,它获取矩形的“长度”和“宽度”并返回该矩形的面积和周长。由于 R 语言只能返回一个对象。因此,创建一个对象,它是一个包含“面积”和“周长”的列表并返回该列表。

R

# A simple R function to calculate
# area and perimeter of a rectangle
 
Rectangle = function(length, width){
  area = length * width
  perimeter = 2 * (length + width)
   
  # create an object called result which is
  # a list of area and perimeter
  result = list("Area" = area, "Perimeter" = perimeter)
  return(result)
}
 
resultList = Rectangle(2, 3)
print(resultList["Area"])
print(resultList["Perimeter"])

输出:

$Area
[1] 6

$Perimeter
[1] 10

R 编程语言中的内联函数

有时,当您只想创建一个非常小的函数时,创建一个 R 脚本文件、加载它、执行它是很多工作。所以,在这种情况下,我们能做的就是一个内联函数。

要创建内联函数,您必须使用带有参数 x 的函数命令,然后是函数的表达式。

例子:

R

# A simple R program to
# demonstrate the inline function
 
 
f = function(x) x^2*4+x/3
 
print(f(4))
print(f(-2))
print(0)

输出:

65.33333
15.33333
0

在 R 编程语言中将参数传递给函数

有几种方法可以将参数传递给函数:

  • 情况 1 :通常在 R 中,参数以与函数定义中相同的顺序传递给函数。
  • 案例2 :如果您不想遵循任何顺序,您可以做的是您可以使用任何顺序的参数名称传递参数。
  • 情况 3 :如果未传递参数,则使用默认值执行函数。

现在,让我们在以下 R 代码中查看每种情况的示例:

R

# A simple R program to demonstrate
# passing arguments to a function
 
Rectangle = function(length=5, width=4){
  area = length * width
  return(area)
}
 
# Case 1:
print(Rectangle(2, 3))
 
# Case 2:
print(Rectangle(width = 8, length = 4))
 
# Case 3:
print(Rectangle())

输出:

6
32
20

R 编程语言中函数的惰性求值

在 R 中,函数以惰性方式执行。当我们说惰性时,这意味着如果缺少某些参数,只要执行不涉及这些参数,该函数仍会执行。

例子:

在下面给出的“气缸”函数中。函数中定义了“直径”、“长度”和“半径”三个函数,体积计算在本次计算中不涉及“半径”这个参数。现在,当你传递这个参数“直径”和“长度”时,即使你没有传递这个“半径”,函数仍然会执行,因为这个半径没有在函数内部的计算中使用。
让我们用下面给出的 R 代码来说明这一点:

R

# A simple R program to demonstrate
# Lazy evaluations of functions
 
Cylinder = function(diameter, length, radius ){
  volume = pi*diameter^2*length/4
  return(volume)
}
 
# This'll execute because this
# radius is not used in the
# calculations inside the function.
print(Cylinder(5, 10))

输出:

196.3495

如果您不传递参数,然后在函数定义中使用它,则会抛出一个错误,即此“半径”未传递并且正在函数定义中使用。

例子:

R

# A simple R program to demonstrate
# Lazy evaluations of functions
 
Cylinder = function(diameter, length, radius ){
  volume = pi*diameter^2*length/4
  print(radius)
  return(volume)
}
 
# This'll throw an error
print(Cylinder(5, 10))

输出:

Error in print(radius) : argument "radius" is missing, with no default