R语言的函数形式为:
Functionname(variable1,variable2,……)
对于R中的函数可以有如下分类:
![](https://i-blog.csdnimg.cn/blog_migrate/3b846e6bc60443b92b9ffd256a95cfea.png)
下面我们将按以上分类介绍一些常见的函数,及其使用方法
一、数学函数
1️⃣abs(x):绝对值。
> abs(-4)
[1] 4
2️⃣sqrt(xx):平方根。
> sqrt(25)
[1] 5
//另一种写法:
>25^(0.5)
[1] 5
3️⃣ceiling(x):不小于x的最小整数。
> ceiling(2.5)
[1] 3
4️⃣floor(x):不大于x的最大整数。
> floor(6.45)
[1] 6
5️⃣trunc(x):向0的方向截取的x中的整数部分
> trunc(5.99)
[1] 5
6️⃣round(x,digits=n):将x舍入为指定位的小数。
> round(4.576,digits = 2) //保留两位小数
[1] 4.58
7️⃣signif(x,digits=n):将x摄入为指定的有效数字位数。
> signif(3.66,digits = 2) //保留两位有效数字
[1] 3.7
8️⃣cos(x):余弦。
9️⃣sin(x):正弦。
🔟tan(x):正切。
🔴acos(x):反余弦。
🔴asin(x):反正弦。
🔴atan(x):反正切。
🔴cosh(x):双曲余弦。
🔴sinh(x):双曲正弦。
🔴tanh(x):双曲正切。
🔴acosh(x):反双曲余弦
🔴asinh(x):反双曲正弦。
🔴atanh(x):反双曲正切。
🔴log(x,base=n):对x取以n为底的对数。
> log(8,2)
[1] 3
🔴log(x):自然对数
> log(10)
[1] 2.302585
🔴log10(x):常用对数。
> log10(40)
[1] 1.60206
> log(40,10)
[1] 1.60206
🔴exp(x);指数函数
> exp(2)
[1] 7.389056
二、样本统计函数
🔴mean(x):平均数。
> mean(c(1,2,3,4,5))
[1] 3
🔴median(x):中位数。
> median(c(1,2,3,4,5))
[1] 3
🔴sd(x):标准差。
> sd(c(1,2,3,4,5,6,7))
[1] 2.160247
🔴var(x):方差。
> var(c(1,2,3,4,5,6,7))
[1] 4.666667
🔴mad(x):绝对中位差。
绝对中位差实际求法是用原数据减去中位数后得到的新数据的绝对值的中位数
> mad(c(1,2,3,4,5,6,7))
[1] 2.9652
🔴quantile(x,probs):求分位数。其中x为待求分位数的数值型向量,probs为一个由[0,1]之间的概率值组成的数值向量。
//求x的第25和第75百分位数
> quantile(c(1,2,3,4,5,6,7),c(.25,.75,.50))
25% 75% 50%
2.5 5.5 4
🔴range(x):求值域。
> range(c(1,2,3,4,5,6,7))
[1] 1 7
🔴sum(x):求和。
> sum(c(1,2,3,4,5,6,7))
[1] 28
🔴diff(x,lag=n):滞后差分,lag用于指定滞后几项。默认lag值为1.
> diff(c(1,2,4,5,6,12,23,45),lag=2) //与后面第二个元素的差值
[1] 3 3 2 7 17 33
> diff(c(99,12,23,13,11),lag = 2) //并不是取绝对值而是后值减去前值的结果
[1] -76 1 -12
🔴min(x):最小值。
> min(c(12,22,33,11,55,4,3))
[1] 3
🔴max(x):最大值。
> max(c(11,22,33,55,32,456,23))
[1] 456
🔴scale(x,center=TRUE,scale=TRUE):为数据对象x按列进行中心化(center=TRUE)或标准化(center=TRUE,scale=TRUE).
默认情况下,函数scanle(0对矩阵或数据框的指定列进行均值为0,标准差为1的标准化:
mydata <- scale(mydata)
要对每一列进行任意均值和标准差的标准化,可以使用如下代码:
mydata <- scale(mydata)*SD + M
//其中M时想要的均值,SD为想要的标准差。
> x <- c(1,2,3,4,5,6,7,8,9,15,12)
> mean(x) //利用数学函数计算均值
[1] 6.545455
> sd(x) //利用数学函数计算均值
[1] 4.274661
> n<- length(x) //普通方法分步骤求
> meanx <- sum(x)/n
> css <- sum((x-meanx)^2)
> sdx <- sqrt(css/(n-1))
> meanx
[1] 6.545455
> sdx
[1] 4.274661
三、概率函数
概率函数的函数形式:
[dpqr]distribution_abbrevation
其中第一个字母表示其所分布的某一方面。
🔴d=密度函数(density)
🔴p = 分布函数(distribution function)
🔴q = 分位数函数(quantile function)
🔴r = 生成随机数(随机偏差)
常用的概率函数和缩写如下:
🔴Beta分布:beta
🔴Logistic分布:logis
🔴二项分布:binom
🔴多项分布:multinom
🔴柯西分布:cauchy
🔴负二项分布:nbinom
🔴(非中心)卡方分布:chisq
🔴正态分布:norm
🔴指数分布:exp
🔴泊松分布:pois
🔴F分布:f
🔴Wilcoxon符号秩分布:signrank
🔴Gamma分布:gamma
🔴t分布:t
🔴几何分布:geom
🔴均匀分布:unif
🔴超几何分布:hyper
🔴Weibull分布:weibull
🔴对数正态分布:lnorm
🔴Wilcoxon分布:wilcox
下面我们以正态分布函数为例,了解这些函数的使用方法。如果不指定一个均值和标准差,则函数将假定其为标准正态分布(均值为0,标准差为1).密度函数、分布函数、分位数函数和随机数生成函数的使用。标准正态分布概率密度函数如图所示
> x<- pretty(c(-3,3),30)
> y<- dnorm(x)
> plot(x,y,
+ type="l",
+ xlab="NormalDeviate",
+ ylab="Density",
+ yaxs="i"
+ )
![](https://i-blog.csdnimg.cn/blog_migrate/7e42b50911bd472104daedf5de53d5bd.png)
//位于z=1.96左侧的标准正态曲线下方面积是多少?
> pnorm(1.96)
[1] 0.9750021
//标准正态分布的0.975分位点值为多少?
> qnorm(.975)
[1] 1.959964
//均值为500,标准差为100的正态分布的0.9分位点值为多少?
> qnorm(.9,mean=500,sd=100)
[1] 628.1552
//生成50个均值为50,标准差为10的正态随机数
> rnorm(50,mean=50,sd=10)
[1] 64.78444 60.26996 42.01896 45.74285 57.23758 55.78928
[7] 52.76288 27.70605 48.96980 57.06087 54.57087 55.67959
[13] 56.16570 42.23801 38.15936 31.39706 30.73801 52.26001
[19] 20.99064 54.57117 41.80538 39.85455 56.55879 50.32357
[25] 60.78872 38.68806 51.21971 44.80262 40.67996 50.30090
[31] 37.90312 46.72018 54.51602 54.12891 51.05130 48.14688
[37] 25.68737 35.19589 51.13166 51.97756 51.88537 34.10046
[43] 42.48491 60.20349 53.34044 47.91753 42.12124 41.64695
[49] 42.52999 58.59672
四、字符处理函数
一些常用的字符处理函数如下所示:
上述的数字和统计函数是用来处理数值型数据的,而字符处理函数可以从文本型数据中抽取信息,或者为打印输出和生成报告重设文本格式。一些常用的字符处理函数如下所示:
🔴nchar(x):返回字符串x中的字符数量。
> x <- c("ab","cde","dsdesd")
> length(x)
[1] 3
> nchar(x)
[1] 2 3 6
🔴substr(x,start,stop):函数返回给定字符串x中指定位置范围start:stop上的子字符串。
> x <- "abcdefghij"
> substr(x,2,4)
[1] "bcd"
> substr(x,2,4) <- "22222" //指定更改字符串中的元素
> x
[1] "a222efghij"
🔴grep(pattern,x,ignore.case=FALSE,fixed=FALSE):在字符串向量x中搜索给定的子字符串pattern。如果x有n个元素,即包括n个字符串,则grep(pattern,x)会返回一个长度不超过n的向量。若fixed=FALSE,则pattern为一个正则表达式;若fixed=TRUE,则pattern为一个文本字符串,返回值为匹配的下标。
> grep("A",c("b","A","c"),fixed=TRUE)
[1] 2
> grep("A",c("b","A","c"),fixed=FALSE)
[1] 2
> grep("A",c("b","A","c","A"),fixed=FALSE)
[1] 2 4
> grep("A",c("b","A","c","A"),fixed=TRUE)
[1] 2 4
//简答理解就是搜索子字符串在x中的位置
🔴sub(pattren,replacement,x,ignore.case=FALSE,fixed=FALSE):在x中搜索pattern,并以文本replacement将其替换。若fixed=FALSE,则pattern为一个正则表达式;若fixed=TRUE,则pattern为一个文本字符串。
> sub("\\s",".","HELLO THERE")
[1] "HELLO.THERE"
//注意"\s"式一个用来查找空白的正则表达式,使用"\\s"而不用"\"的原因在于后者式R中的转义字符
🔴srtsplit(x,split,fixed=FALSE):在split处分割字符向量x中的元素,拆分成若干个字符子串,返回这些子字符串组成的R列表。若fixed=FALSE,则pattern为一个正则表达式;若fixed=TRUE,则pattern为一个文本字符串。
> y <- strsplit("abc","") //将y中的字符向量拆分成为一个列表
> y
[[1]]
[1] "a" "b" "c"
> unlist(y)[2] //找出y列表中第二个元素
[1] "b"
> sapply(y,"[",2)
[1] "b"
> strsplit("6-16-1011",split="-") //以"-"为为界限划分
[[1]]
[1] "6" "16" "1011"
>
🔴paste(…,sep=""):把若干个字符串拼接起来,返回一个长字符串,分隔符为sep。
> paste("x",1:3,sep="")
[1] "x1" "x2" "x3"
> paste("x",1:3,sep="M")
[1] "xM1" "xM2" "xM3"
> paste("Today is","date()")
[1] "Today is date()"
> paste("Today is",date())
[1] "Today is Sat Mar 18 23:23:26 2023"
> paste("North","Pole")
[1] "North Pole"
🔴toupper(x);大写转换
>toupper("def")
>[1]DEF
🔴tolower(x):小写转换。
>tolower("DEF")
>[1]def
🔴regexpr(pattern,tex):在字符串text中寻找pattern,返回与pattern匹配的第一个子字符串的起始字符位置。
> regexpr("uat","Rquator")
[1] 3
🔴gregexpr((pattern,tex):功能与regexpr()函数一样,不过它会寻找与pattern匹配的全部子字符串的起始位置。
> gregexpr("iss","Missppiissist")
[[1]]
[1] 2 8
五、其他实用函数
🔴length(x):对象x的长度
>x <- c("a,b,c,d,e,f")
>length(x)
[1]6
🔴seq(from,to,by):生成一个序列。
>mysequ <-seq(1,20,3) // 1到20每三隔个数取一次
> mysequ
[1] 1 4 7 10 13 16 19
🔴rep(x,n):将x重复n次
> rep("abc",3)
[1] "abc" "abc" "abc"
> rep(1:3,3)
[1] 1 2 3 1 2 3 1 2 3
🔴cut(x,n):将连续型变量x分割为有着n个水平的因子。
> cut(x,5)
[1] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8]
[5] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8]
[9] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8]
[13] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8]
[17] (0.901,20.8] (0.901,20.8] (0.901,20.8] (0.901,20.8]
[21] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6]
[25] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6]
[29] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6]
[33] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6]
[37] (20.8,40.6] (20.8,40.6] (20.8,40.6] (20.8,40.6]
[41] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4]
[45] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4]
[49] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4]
[53] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4]
[57] (40.6,60.4] (40.6,60.4] (40.6,60.4] (40.6,60.4]
[61] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2]
[65] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2]
[69] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2]
[73] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2]
[77] (60.4,80.2] (60.4,80.2] (60.4,80.2] (60.4,80.2]
[81] (80.2,100] (80.2,100] (80.2,100] (80.2,100]
[85] (80.2,100] (80.2,100] (80.2,100] (80.2,100]
[89] (80.2,100] (80.2,100] (80.2,100] (80.2,100]
[93] (80.2,100] (80.2,100] (80.2,100] (80.2,100]
[97] (80.2,100] (80.2,100] (80.2,100] (80.2,100]
5 Levels: (0.901,20.8] (20.8,40.6] (40.6,60.4] ... (80.2,100]
🔴petty(x,n)创建美观的分割点。通过选取n+1个等间距的取整值,将一个连续变量x分割为n个区间。
> x <- c(1:10)
> pretty(x,2)
[1] 0 5 10
> pretty(5)
[1] 0 5