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