R 中自定义函数的美妙之处

发布日期:2026-06-25 05:49:03   来源 : 杭州电子商务研究院    浏览量 :16
杭州电子商务研究院 发布日期:2026-06-25 05:49:03  
16

介绍

在 R 中工作就是使用函数。它们是语言的核心,这是一件了不起的事情,因为它使 R 的工作易于复制、组织和跨团队扩展。如果您的 R 脚本超过 50 行,请帮未来的您一个忙,编写一些函数。如果您正在阅读本文,那么恭喜您自己选择了语言的基础部分来关注 - 了解这些构建块对于数据工艺至关重要。正如 John Chambers提到的R 中发生的一切都是函数调用。虽然您可能已经使用过内置函数,但本指南将帮助您编写自己的函数。

对于那些好奇的人,我们将通过 RStudio 和 R Markdown 构建它。

基础知识

什么是函数?

你在这里的意思究竟是什么?与大多数编程语言一样,在 R 中,函数是一组语句的集合,这些语句通常接收一些输入,进行一些计算,并提供输出。

R 中有数百个很棒的内置函数。查看它们,好好学习它们,并为编写自己的函数而感到兴奋。尽管 R 是一种统计或数据相关的语言,但要想在 R 中高效工作,您就应该掌握所有优秀的软件工程原理。

如何定义函数?

为了关注结构而不是逻辑,这里有一个接受两个输入并执行减法的简单函数:

      subby <- function(a, b) {
  a - b
}
    

它的名字是这样的:

      subby(5, 3)
    

请注意,R 函数有三个部分:

  1. 您传递给函数的形式或输入。这里是ab。有关更多信息,请参阅?formals
  2. 函数定义(即花括号内的逻辑)。有关详细信息,请参阅?body
  3. 正在考虑的函数的环境。有关更多信息,请参阅?environment

请注意,如果您刚刚开始,请先尝试构建和使用一些功能,然后再深入研究环境。

如果您是动手能力较强的人,请运行上面的代码,然后运行​​formals(subby)body(subby)environment(subby)来使其生效。

为什么那是一件美丽的事情?

函数提供了许多好处。它们使

  • 自动检查你的代码(通过单元测试
  • 组织你的工作
  • 记录你的工作
  • 共享工作
  • 调试你的工作

R 中的函数有何特别之处?

这些内容适用于用户定义函数内置函数:

  1. R 具有一流的功能。正如 Hadley Wickham在这里所说,

您可以使用函数执行任何可以使用向量执行的操作:您可以将它们分配给变量、将它们存储在列表中、将它们作为参数传递给其他函数、在函数内部创建它们,甚至将它们作为函数的结果返回。

  1. 请注意,在 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 中的匿名函数通常与 *apply 类函数一起使用。有关更多信息,请参阅此处此处。

管理你的函数

你应该把你的函数放在哪里?好问题。主要有两个选择:

  1. 将所有函数放在同一个脚本文件中;对于许多任务来说,将函数定义集中到顶部的library()语句之后都是可以的。
  2. 编写适当的包。如果您真的想在内部或外部分发代码,这是必须的。它强制执行极好的最佳实践,并且不太难。

避免将所有函数集中到与主脚本不同的文件中,因为这会使分发变得困难

结论

无论您是老手还是新手,了解 R 函数的来龙去脉将为您节省大量 R 工作时间。将它们视为您包中最重要的工具之一。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据