一、函数格式
如下所示:
- hello:函数名;
- function:定义的R对象是函数而不是其它变量;
- ():函数的输入参数,可以为空,也可以包含参数;
- {}:函数体,如果函数体只有一行,可以省略{}。
hello <- function() {
out <- "hello, ning."
return(out)
}
hello()
二、函数参数
函数参数可以是变量中的任何一种:向量、矩阵、数据框、列表、因子、逻辑值等。
1、缺省参数
缺省参数是在函数参数声明中对函数的某个参数指定的默认值。此处不过多赘述。
2、额外参数
R语言中称之为点点点(...)参数。额外参数允许函数具有除函数体所需输入参数之外的其它参数,并且不需要在函数参数声明中一一指定,具有很大的灵活性。
额外参数可以解决函数参数不确定或需要引用其它函数输出值作为输入参数的问题。
hello <- function(name = NULL, ...){
out <- paste("你好," name)
return(out)
}
hello(name = "R", extra = "Python")
hello()
三、函数返回值
函数返回值可以是任何R语言对象。
- 函数最后一行代码如果不是进行变量赋值的话,那么最后一行代码的运行值会自动返回。
- 使用return命令清晰指定需要返回的值,并告知函数退出运行。
四、函数调用
R函数有两种调用方式:
- 最常见的是通过函数名称调用;
- 其次是通过 do.call()函数 形式,使用此方法时,需要先指定被调用函数的名称,然后以列表形式指定被调用函数的参数值。
如下示例为第二种调用方式:
do.call(what = hello, args = list(name = "R"))
五、常用R函数
1、文件操作函数
查看目录和文件函数
getwd():查看当前工作目录
list.dirs(path=getwd(),full.names=F):查看当前目录或指定目录的子目录
dir():查看当前子目录
list.dir():查看当前子目录的文件
file.info(list.files(),extra_cols=F):查看当前目录的子目录及文件的详细信息
file.mode(list.files()):查看当前目录及文件权限信息
file.mtime(list.files()):查看当前目录及文件最近一次修改信息
file.size(list.files()):查看当前目录及文件大小
system("tree"):查看目录结构。
检查目录和文件函数
file.exists():查看文件是否存在
file_test(op=“-d”, x="wn"):查看wn是否是目录
file_test(op="-f", x = "wn.txt"):查看wn.txt是否是文件
创建目录和文件函数
path.expand():将输入文件目录替换为当前系统平台支持的文件目录
file.create():创建空白文件
dir.create():创建空白目录
变更目录和文件函数
file.copy(from="test.R", to="test",overwrite=T,recursive=T):赋值文件test.R到test文件夹里。
file.name(from="test.R", to="test1.R"):将文件test.R重命名为test1.R
file.append(file1="test.R", file2="test1.R"):将test.R追加到test1.R中
删除目录和文件函数
file.remove(c("test1.R","test.R")):删除文件test1.R和test.R
unlink("test",recursive=T):删除test文件夹及其子文件夹
2、计算函数
四则运算函数
x <- 20
y <- 47
# 加法
x + y
# 减法
x - y
# 乘法
x * y
# 除法
x / y
# 取余数
y %% x
# 取绝对值
abx(-y)
数学计算函数
x <- 3
y <- 2
# 幂运算
x ^ y
x ^ -y
x ^ (1/y)
# 对数
log(x, base = 2)
# 平方根
sqrt(y)
比较函数
x <- 7
y <- 6
# 等于与不等于
x == y
x != y
# 大于、大于等于、小于、小于等于
x > y
x >= y
x < y
x <= y
# 是否为真
isTRUE(x != y)
# 是否为假
isFALSE(x == y)
向量比较
x <- c(0,0,1)
y <- c(1,1,0)
# 向量的和条件比较
x & y
# x向量和y向量的第一个分量的和条件比较
x && y
# 或条件比较
xor(x,y)
x | y
约数函数
取整、向上取整、向下取整、四舍五入
x <- 2.33333
# 取整
trunc(x)
# 向上取整
ceiling(x)
# 向下取整
floor(x)
# 四舍五入
round(x)
向量计算函数
标准差、方差、全距、连乘、累加、累乘、秩次、排序、中位数、分位数
x <- seq(from=1, to=10, by = 2)
# 求和、平均值、最大值、最小值
sum(x)
mean(x)
max(x)
min(x)
# 求标准差、方差、全距
sd(x)
var(x)
range(x)
# 求连乘、累加、累乘
prod(x)
cumsum(x)
cumprod(x)
# 求秩次、排序、中位数和分位数
rank(x)
order(x, decreasing = T)
sort(x, decreasing = T)
median(x)
quantile(x)
集合计算函数
x <- seq(from = 1, to = 10, by = 1)
y <- seq(from = 1, to = 20, by = 2)
# 求交集
intersect(x,y)
# 求并集
union(x,y)
# 求差集
setdiff(x,y)
# 判断是否相等
setequal(x,y)
# 求取y的唯一值
unique(y)
# 查找y中大于8的元素索引
which(y >= 8)
# 查找x在y中存在的元素索引
which(is.element(x,y))
3、概率分布函数
主要包括正态分布、均匀分布、指数分布、Gamma分布、Beta分布、t分布、F分布、卡方分布
正态分布
随机数生成函数、概率密度函数和累积分布函数。
# 随机生成30个平均数为0,标准差为1的正态分布随机数
x <- rnorm(n = 30, mean = 0, sd = 1)
# 求正态向量x的概率密度函数值
dnorm(x, mean = 0, sd = 1)
# 求正态向量x的累积分布函数值
pnorm(x, mean = 0, sd = 1)
均匀分布
随机数生成函数、概率密度函数和累积分布函数。
# 生成20个0~100,并服从均匀分布的随机数
x <- runif(n = 20, min = 0, max = 100)
# 求服从均匀分布向量x的概率密度函数值
dunif(x, min = 0, max = 100)
# 求服从均匀分布向量x的累积分布函数值
punif(x, min = 0, max = 100)
指数分布
随机数生成函数、概率密度函数和累积分布函数。
# 生成10个服从指数分布e(0.5)的随机数
x <- rexp(n = 10, rate = 0.5)
# 求服从指数分布e(0.5)向量x的概率密度函数值
dexp(x, rate = 0.5)
# 求服从指数分布e(0.5)向量x的累积分布函数值
pexp(x, rate = 0.5)
Gamma分布
随机数生成函数、概率密度函数和累积分布函数
# 生成10个服从形状参数为5,尺度参数为3的gamma分布随机数
x <- rgamma(n = 10, shape = 5, scale = 3)
# 求gamma分布向量x的概率密度函数值
dgamma(x, shape = 5, scale = 3)
# 求gamma分布向量x的累积分布函数值
pgamma(x, shape = 5, scale = 3)
Beta分布
随机数生成函数、概率密度函数和累积分布函数
# 生成10个服从形状参数分别为2的beta分布随机数
x <- rbeta(n = 10, shape1 = 2, shape2 = 2)
# 求beta分布向量x的概率密度函数值
dbeta(x, shape1 = 2, shape2 = 2)
# 求beta分布向量x的累积分布函数值
pbeta(x, shape1 = 2, shape2 = 2)
t分布
随机数生成函数、概率密度函数和累积分布函数
# 生成10个服从自由度为3的t分布随机数
x <- rt(n = 10, df = 3)
# 求t分布向量x的概率密度函数值
dt(x, df = 3)
# 求t分布向量x的累积分布函数值
pt(x, df = 3)
F分布
随机数生成函数、概率密度函数和累积分布函数
# 生成10个服从自由度分别为3和7的F分布随机数
x <- rf(n = 10, df1 = 3, df2 = 7)
# 求F分布向量x的概率密度函数值
df(x, df1 = 3, df2 = 7)
# 求F分布向量x的累积分布函数值
pf(x, df1 = 3, df2 = 7)
卡方分布
随机数生成函数、概率密度函数和累积分布函数
# 生成10个服从自由度为7的卡方分布随机数
x <- rchisq(n = 10, df = 7)
# 求卡方分布向量x的概率密度函数值
dchisq(x, df = 7)
# 求卡方分布向量x的累积分布函数值
pchisq(x, df = 7)
4、字符处理函数
字符串长度计算、拼接和拆分
# 求取字符串的长度
nchar("R语言的用处大吗?")
# 拼接字符串
paste("R语言", "Python语言", sep = "", collapse = "")
paste0("R语言", "Python语言", collapse = "")
# 拆分字符串
strsplit(x = "a;b;c;d;f;h", split = ";", fixed = T)
字符串的查找、抽取和替换
函数参数说明:
- pattern:需要查找、抽取或替换的字符模式,参数值可以是字符串或正则表达式;
- fixed:决定将pattern参数设定为字符串还是正则表达式,默认为FALSE,即pattern为正则表达式;
- useBytes:决定是逐字符进行匹配还是根据字符进行匹配,默认为逐字符进行匹配;
- ignore.case:在英文字符模式匹配下是否区分大小写,默认为FALSE,即区分大小写;
- perl:是否使用与perl语言兼容的正则表达式,默认为FALSE,即不使用。
x <- c("R语言好", "Python语言也不错", "学习R语言", "你喜欢R语言吗?","Ren")
# 查找字符串向量x中包含“R语言”的字符并显示出其标号
grep(pattern = "R语言", x = x, ignore.case = F, perl = F, value = F, fixed = FALSE, useBytes = F, invert = F)
# 查找字符串向量x中包含“R语言”的字符并返回逻辑值
grepl(pattern = "R语言", x = x, ignore.case = F, perl = F, fixed = FALSE, useBytes = F)
# 抽取字符串向量x中的第1个字符至第3个字符
substr(x = x, start = 1, stop = 3)
# 将字符串向量x中的“R语言”替换成"r语言"
sub(pattern = "R语言", replacement = "r语言", x = x, ignore.case = F, perl = F, fixed = F, useBytes = F)