R语言笔记6:在R中写一些简单的函数、functions基础和作用域

您所在的位置:网站首页 简单的简怎么写不对 R语言笔记6:在R中写一些简单的函数、functions基础和作用域

R语言笔记6:在R中写一些简单的函数、functions基础和作用域

2024-07-13 11:35| 来源: 网络整理| 查看: 265

R语言基础系列:

1数据类型(向量、数组、矩阵、 列表和数据框)

2读写数据所需的主要函数、与外部环境交互

3数据筛选——提取对象的子集

4向量、矩阵的数学运算

5控制结构

Your first R function

命令一个函数时,一般不写在交互式命令行里,而是写在一个空白的文本文件中,即把函数放在一个R包中,这里面包含着文档(documentation),是一个更加结构化的环境。

我们使用的软件是RStudio,左上角新建一个新的R脚本来写代码。

Example 1

举个例子,简单了解一下如何使用函数的语法、如何指定参数以及如何返回结果:

命令一个简单的函数,求x, y的和。

## 给函数赋值为add2,第一行小括号里写进变量,第二行大括号里写入运算 add2 add2 add2(7, 5) [1] 12 Example 2

下一个例子稍微复杂一点:

我们要输入一个数字向量,然后返回这个向量的子集(返回其中大于10的数字)

above10 above10 x above10(x)   [1] 11 12 13 14 15 16 > above10(1:9) integer(0)

如果我们不设置10,而是改成任意数字n,以上命令可改写为:

above above x above(x, 12) [1] 13 14 15 16

设置“缺省值”(可以理解为默认值),即如果在函数运行过程中不指定n的值时,系统自动筛选的标准:

above above above(x)     ## 自动筛选数字向量中大于10的数字 [1] 11 12 13 14 15 16 Example 3

下面这个例子再复杂一点,我们要给函数一个参数,然后使用循环遍历这个函数的每一列:

比如,取一个矩阵,然后计算每列的平均值:

columnmean args(cat) function (..., file = "", sep = " ", fill = FALSE, labels = NULL,    append = FALSE) NULL

使用 ...函数的一个注意事项:

就是任何出现在 ...之后的参数列表必须明确的给出名称。而且不能够部分匹配或位置匹配

举例:

> paste("a","b",sep = ":") [1] "a:b"

不能位置匹配或部分匹配:

> paste("a","b",":") [1] "a b :" > paste("a","b",se = ":") [1] "a b :" Scoping Rules of R

作用域(scope,或译作有效范围)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。

什么是作用域规则?

作用域规则(Scoping Rules)决定了一个函数的值如何与自变量绑定起来

在一个函数中,有两种类型的变量:

一种是函数的参数,

另一种存在于函数中的其他变量或符号,并非是函数的参数。问题在于你如何给这些符号赋值。

R用的是词法作用域(Lexical Scoping),也成静态作用域。

词法作用域又叫做静态作用域,采用词法作用域的变量叫词法变量。

词法作用域里,取变量的值时,会检查函数定义时的文本环境,捕捉函数定义时对该变量的绑定。

词法变量有一个在编译时静态确定的作用域。词法变量的作用域可以是一个函数或一段代码,该变量在这段代码区域内可见(visibility);在这段区域以外该变量不可见(或无法访问)。

相反,采用动态作用域的变量叫做动态变量。

只要程序正在执行定义了动态变量的代码段,那么在这段时间内,该变量一直存在;代码段执行结束,该变量便消失。

词法作用域的优点是能够简化运算,在统计分析时非常有效

通过下面这个函数,举个栗子:

f ls(environment(cute)) [1] "n"   "pow"

查看对象的赋值,使用get():

> get("n", environment(cute)) [1] 3

这就是cute()怎么知道n=3的过程。

参考资料:

视频课程 R Programming by Johns Hopkins University:https://www.coursera.org/learn/r-programming/home/welcome

讲义 Programming for Data Science :https://bookdown.org/rdpeng/rprogdatascience/R

-------------------我是求关注的分界线--------------

欢迎大家跟我一起上车~~~~请关注

猜你喜欢

10000+:肠道细菌 人体上的生命 宝宝与猫狗 梅毒狂想曲 提DNA发Nature 实验分析谁对结果影响大  Cell微生物专刊

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:生信宝典 学术图表 高分文章 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板 Shell  R Perl

生物科普  生命大跃进  细胞暗战 人体奥秘  

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外150+ PI,1300+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

点击阅读原文,跳转最新文章目录阅读



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3