首页 > 其他分享 >第五章 函数和正则

第五章 函数和正则

时间:2023-08-13 09:12:21浏览次数:37  
标签:字符 匹配 函数 NA 正则 hypotenuse 第五章 参数

第五章 函数和正则

5.1函数

5.1.1内置函数

5.2.1创建和调用函数

定义函数的格式为:

函数名 <- function(参数列表){

​ 函数体

​ return 返回值

}

注意:没有显式的“return”关键字声明应该从函数返回哪个值。在 R 中,函数中计算的最后一个值将自动返回。

hypotenuse <- function(x, y) {  
	sqrt(x ^ 2 + y ^ 2)
}

调用参数的格式:

函数名(参数列表)

参数可以是位置参数,还可以是关键字参数

> hypotenuse(3, 4)
[1] 5
> hypotenuse(y = 24, x = 7)
[1] 25

如果形参有默认参数,可以不带实参

hypotenuse <- function(x = 5, y = 12) {   
	sqrt(x ^ 2 + y ^ 2) 
} 
hypotenuse() 

formals()、args()和formalArgs()函数都是用于取函数参数

> formals(hypotenuse)
$x
[1] 5
$y
[1] 12

> args(hypotenuse)
function (x = 5, y = 12) 
NULL

> formalArgs(hypotenuse)
[1] "x" "y"

body()和deparse()函数用于返回函数体

> (body_of_hypotenuse <- body(hypotenuse))
{
    sqrt(x^2 + y^2)
}
> deparse(body_of_hypotenuse)
[1] "{"                   "    sqrt(x^2 + y^2)"
[3] "}"

为了避免输入那些实际上没有被函数用到的参数名,R 提供了一个特殊参数 ...,它包含了所有不能被位置或名称匹配的参数

>normalize<-function(x, m=mean(x, ...), s=sd(x, ...), ...) {  
(x-m)/s 
} 
>normalize(c(1, 3, 6, 10, NA))
[1] NA NA NA NA NA
>normalize(c(1, 3, 6, 10, NA), na.rm=TRUE)
[1] -1.0215 -0.5108 0.2554 1.2769 NA

5.2.2 向其他函数传递和接收函数

函数可以像其他变量类型一样地使用,我们可将之作为其他函数的参数,并且从函数中返回。一个常见的,把其他函数当成参数的例子是 do.call。

> do.call(hypotenuse, list(x = 3, y = 4)) 
[1] 5

5.2.3变量的作用域

变量的作用域是指你在哪里可以看到此变量,当你在函数内部定义一个变量时,该函数中下面的语句将能访问到该变量。在 R中,子函数也能访问到这个变量。

5.2正则表达式

grep函数经常和正则表达式一起使用

正则通配符 描述
“^” 匹配一个字符串的开始
“$” 匹配一个字符串的结尾
“.” 匹配除了换行符以外的任一字符
“*” 表示将其前的字符进行0个或多个的匹配
“?” 匹配0或1个正好在它之前的那个字符
“+” 匹配1或多个正好在它之前的那个字符
“|” 表示逻辑的或
“[]” 用来匹配多个字符,如果不使用任何分隔符号,则搜寻这个集合
“[-]” 匹配一个范围,比如sub("[a-c]","",c("abcde","edcba"))匹配从a到c的字符

标签:字符,匹配,函数,NA,正则,hypotenuse,第五章,参数
From: https://www.cnblogs.com/simpleness/p/17626112.html

相关文章

  • 学习go语言编程之函数
    函数定义函数的基本组成:关键字func,函数名,参数列表,返回值,函数体,返回语句。示例如下:funcAdd(aint,bint)(retint,errerror){ ifa<0||b<0{ err=errors.New("shouldbenon-negativenumbers") return } returna+b,nil//支持多重返回值}如果参......
  • 数论函数小计
    1.基础数论函数定义:数论函数,就是值域为整数(陪域为复数)的函数狄利克雷卷积两个数论函数的狄利克雷卷积是一个新的函数比如\(f(n)\),\(g(n)\)它们的卷积就是\(f*g\)怎么卷呢?定义:\(\large{(f*g)(n)=\sum\limits_{d|n}f(n)g(n/d)}\)举个例子:\((f*g)(12)=f(1)*g......
  • 线性筛与欧拉函数
    很萌很可爱!就是把纸质笔记上letex写在这里有亿点慢线性筛埃氏筛,\(O(n\log\logn)\),思路是⌈标记所有质数的倍数⌋这样每个合数可能会被标记好几次,我们改进一下,让每个合数只有一种被标记的方式,即⌈最小质因子*常数⌋具体而言,⌈枚举\(2\tox\)把当前数\(i\)跟......
  • 区间半群查询与 Ackermann 函数
    最近在思考半在线卷积的复杂度有没有可能进一步优化,决定先理清类似的问题以寻求经验.一区间合并如果询问的时候不能进行半群运算,显然我们需要在预处理阶段处理所有答案,必须进行\(O(n^2)\)次计算.二区间合并如果询问的时候可以进行一次半群运算,则可以把序列每次在中......
  • 无涯教程-Perl - package函数
    描述此函数将当前符号表的名称更改为NAME。包名称的范围一直到封闭块的末尾。如果省略NAME,则没有当前包,并且所有函数和变量名称都必须使用其完全限定的名称声明。语法以下是此函数的简单语法-packageNAMEpackage返回值此函数不返回任何值。要了解package关键字,......
  • SV 第五章 面向对象编程基础
    SystemVerilog验证5面向对象编程基础5.1概述对于Verilog和C语言来说,由于他们不是面向对象变成语言,数据的存储往往是分布式的,例如把数据、地址、指令分别保存在不同的数组里面,不利于程序的解读。面向对象变成使得用户可以创建复杂的数据类型,将数据类型紧密地结合在一起,可以在......
  • 无涯教程-Perl - pack函数
    描述此函数对LIST中的表达式求值并将其打包为EXPR指定的二进制结构。使用下表中显示的字符指定格式-每个字符可以可选地跟一个数字,该数字指定要打包的值的类型的重复计数。根据格式,该值是半字节,字符或什至位。*的值重复*,因为LIST中保留了尽可能多的值。可以使用拆包功能将......
  • 正则表达式学习笔记
    .:任意一个字符\d:代表一个数字,等价于[0-9]\D:代表一个非数字,等价于[^\d]或者[^0-9]\s:代表一个空白字符,诸如Space,\n,\r,Tab\S:代表一个非空白字符\w:代表一个单词字符,诸如a,9,_,蛙\W:代表一个非单词字符*:量词,左侧字符串出现任意次(包括\(0\)次)?:量词,左侧字符出现\(\le1\)次+:......
  • 无涯教程-Perl - ord函数
    描述此函数返回EXPR指定的字符的ASCII数值,如果省略则返回$_。例如,ord('A')返回值为65。语法以下是此函数的简单语法-ordEXPRord返回值该函数返回整数。例以下是显示其基本用法的示例代码-#!/usr/bin/perl-wprint("ord()",ord('G'),"\n");执行上述代码后......
  • 无涯教程-Perl - my函数
    描述此函数声明LIST中的变量在包围式块内按词法范围。如果指定了多个变量,则所有变量都必须用括号括起来。语法以下是此函数的简单语法-myLIST返回值此函数不返回任何值。例以下是显示其基本用法的示例代码-#!/usr/bin/perl-wmy$string="Wearetheworld";p......