R 中自定义函数的美妙之处
介绍
基础知识
什么是函数?
你在这里的意思究竟是什么?与大多数编程语言一样,在 R 中,函数是一组语句的集合,这些语句通常接收一些输入,进行一些计算,并提供输出。
R 中有数百个很棒的内置函数。查看它们,好好学习它们,并为编写自己的函数而感到兴奋。尽管 R 是一种统计或数据相关的语言,但要想在 R 中高效工作,您就应该掌握所有优秀的软件工程原理。
如何定义函数?
为了关注结构而不是逻辑,这里有一个接受两个输入并执行减法的简单函数:
subby <- function(a, b) {
a - b
}
它的名字是这样的:
subby(5, 3)
请注意,R 函数有三个部分:
- 您传递给函数的形式或输入。这里是a和b。有关更多信息,请参阅?formals。
- 函数定义(即花括号内的逻辑)。有关详细信息,请参阅?body。
- 正在考虑的函数的环境。有关更多信息,请参阅?environment。
请注意,如果您刚刚开始,请先尝试构建和使用一些功能,然后再深入研究环境。
如果您是动手能力较强的人,请运行上面的代码,然后运行formals(subby)、body(subby)和environment(subby)来使其生效。
为什么那是一件美丽的事情?
R 中的函数有何特别之处?
这些内容适用于用户定义函数和内置函数:
- R 具有一流的功能。正如 Hadley Wickham在这里所说,
您可以使用函数执行任何可以使用向量执行的操作:您可以将它们分配给变量、将它们存储在列表中、将它们作为参数传递给其他函数、在函数内部创建它们,甚至将它们作为函数的结果返回。
- 请注意,在 R 中不需要显式的 return 语句。R 将返回函数定义中最后执行的语句的值。通常,只有在提前退出函数时(例如,如果发生错误)才会包含return 。
来龙去脉
有时,你的函数会需要一个默认值(即使函数调用没有指定该参数,它也会提供一个变量值)。下面是简单的实现方法:
subby <- function(a, b = 10) {
a - b
}
subby(12)
当您在函数内部时,R 会为您创建一个新环境。此函数环境包括函数创建环境中的所有内容。在下面的代码片段中,z是一个全局变量(即在整个程序执行过程中都存在的变量)。您可以在脚本的任何部分(包括函数内部)更改和使用它。
z = 4
subby <- function(a) {
a - z
}
subby(10)
请注意,这只是为了展示 R 函数环境如何工作 - 在您的函数中,您不应该依赖全局变量。
请注意,函数内部声明的变量是该函数的局部变量。换句话说,如果我们像这样声明函数,那么 f 就是一个只能在该函数的环境中访问的局部变量。
subby <- function(a, b) {
f <- a - b
f # Return the variable
}
subby(10, 2)
这意味着f不能在主脚本中被引用。
编写出色的函数
在 R 中,就像在任何语言中一样,有一些策略可以使你自己的函数更可靠、更可扩展。无论你是在公司内部还是外部分发这些函数,这都是快速交朋友的方法。
编写函数时,要能做好一件事,并且要命名得具有描述性(最好使用动词作为函数名)。这两点赋予每个函数独特的身份,这样你的代码就会更简洁,也更容易调试。
检查参数输入。如果输入类型错误或函数使用不当,则提供有用的消息。
匿名函数
如果您不值得花时间为函数命名,那么您就需要处理匿名函数。匿名函数如下所示。请注意,函数定义在花括号内:首先是参数,然后是逻辑,然后是通过(2,3)进行的函数调用。
{function (x,y) x^y} (2,3)
管理你的函数
结论
无论您是老手还是新手,了解 R 函数的来龙去脉将为您节省大量 R 工作时间。将它们视为您包中最重要的工具之一。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~