立即注册 登录
气象家园 返回首页

主啊的个人空间 http://bbs.06climate.com/?69999 [收藏] [复制] [分享] [RSS]

日志

R语言常用数学函数

已有 332 次阅读2018-10-5 11:17 |个人分类:R

语言的数学运算和一些简单的函数整理如下:
向量可以进行那些常规的算术运算,不同长度的向量可以相加,这种情况下最短的向量将被循环使用。

> x <- 1:4
> a <- 10
> x * a
[1] 10 20 30 40

> x + a
[1] 11 12 13 14

> sum(x)        #对x中的元素求和
[1] 10

> prod(x)       #对x中的元素求连乘积
[1] 24

> prod(2:8)         #8的阶乘
[1] 40320

> prod(2:4)         #4的阶乘
[1] 24

> max(x)            #x中元素的最大值
[1] 4

> min(x)            #x中元素的最小值
[1] 1

> which.max(x)      #返回x中最大元素的下标
[1] 4

> which.min(x)      #返回x中最小元素的下标
[1] 1

> x <- 4:1          #对向量x重新赋值
> x
[1] 4 3 2 1

> which.min(x)
[1] 4

> which.max(x)
[1] 1

> range(x)           #与c(min(x), max(x))作用相同
[1] 1 4

> mean(x)            #x中元素的均值
[1] 2.5

> median(x)          #x中元素的中位数
[1] 2.5

> var(x)         #x中元素的的方差(用n-1做分母)
[1] 1.666667

> x
[1] 4 3 2 1

> rev(x)         #对x中的元素取逆序
[1] 1 2 3 4

> sort(x)        #将x中的元素按升序排列;
[1] 1 2 3 4

> x
[1] 4 3 2 1

> cumsum(x)      #求累积和,返回一个向量,它的第i个元素是从x[1]到x[i]的和
[1] 4  7  9 10

> cumsum(rev(x))
[1] 1  3  6 10

> y <- 11:14
> pmin(x,y)      #返回一个向量,它的第i个元素是x[i], y[i], . . .中最小值
[1] 4 3 2 1

> x <- rev(x) #重新赋值
> pmin(x,y)
[1] 1 2 3 4

> pmax(x,y)   #返回一个向量,它的每个元素是向量x和y在相应位置的元素的最大者
[1] 11 12 13 14

> cumprod(x) #求累积(从左向右)乘积
[1] 1  2  6 24

> cummin(x)  #求累积最小值(从左向右)
[1] 1 1 1 1

> cummax(x)  #求累积最大值(从左向右)
[1] 1 2 3 4

> match(x, y)  #返回一个和x的长度相同的向量,表示x中与y中元素相同的元素在y中的位置(没有则返回NA)
[1] NA NA NA NA

> y[c(2,4)] <- c(2,4)
> y
[1] 11 2 13  4

> match(x, y)
[1] NA 2   NA  4

na.omit(x)函数忽略有缺失值(NA)的观察数据(如果x是矩阵或数据框则忽略相应的行)
> na.omit(match(x,y))
[1] 2 4

attr(,"na.action")
[1] 1 3

attr(,"class")
[1] "omit"

> na.fail(match(x,y)) #na.fail(x) 如果x包含至少一个NA则返回一个错误消息
错误于na.fail.default(match(x,y)) : 对象里有遺漏值

which()函数返回一个包含x符合条件(当比较运算结果为真(TRUE)的下标的向量,在这个结果向量中数值i说明x[i] == a(这个函数的参数必须是逻辑型变量)
> which( x == 2)
[1] 2

> which( x <= 2)
[1] 1 2

求组合数
> choose(4,2)
[1] 6

> choose(3,1)
[1] 3

> choose(-3,1)
[1] -3

> choose(-4,2)
[1] 10

> y <- c(1:4, rep(4,1))
> y
[1] 1 2 3 4 4

> unique(y)    #如果y是一个向量或者数据框,则返回一个类似的对象但是去掉所有重复的元素(对于重复的元素只取一个)
[1] 1 2 3 4

> table(y)              #返回一个表格,给出y中重复元素的个数列表(尤其对于整数型或者因子型变量)
y

1 2 3 4

1 1 1 2

> subset(x, x>2) #返回x中的一个满足特定条件...的子集
[1] 3 4

> sample(x, 2) #从x中无放回抽取size个样本,选项replace= TRUE表示有放回的抽样
[1] 1 2

> sample(x, 2, replace = TRUE) #有放回的抽样
[1] 2 3

 
R中用来处理数据的函数太多了而不能全部列在这里。读者可以找到所有的基本数学函数(log, exp, log10, log2, sin, cos, tan, asin, acos, atan, abs, sqrt,. . . ), 专业函数(gamma,digamma, beta, besselI, . . . ),同样包括各种统计学中有用的函数。




先言:R语言常用界面操作
帮助:help(nnet) = ?nnet =??nnet
清除命令框中所有显示内容:Ctrl+L
清除R空间中内存变量:rm(list=ls())、gc()
获取或者设置当前工作目录:getwd、setwd
保存指定文件或者从磁盘中读取出来:save、load
读入、读出文件:read.table、wirte.table、read.csv、write.csv
1、一些简单的基本统计量

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. #基本统计量  
  2. sum/mean/sd/min    #一些基本统计量  
  3.   
  4. which.min()        #找出最小值的序号  

以上是单数列,如果是多变量下的呢?

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. #多元数据  
  2. colMeans()    #每列,row是行(横向)  
  3. colnames()    #列名  
  4. colSums()     #列求和  
  5. cov()         #协方差阵  
  6. cor()         #相关矩阵  
  7. cor.test()    #相关系数  

 

 

abs绝对值
sqrt平方根
expe^x次方
log自然对数
log2,log10其他对数
sin,cos,tan三角函数
sinh,cosh,tanh双曲函数
poly正交多项式
polyroot多项式求根

 

 

对象操作:

assign赋值操作,等同于“<-”
rm删除对象
ls显示内存中的对象
str显示对象的内在属性或简要说明对象
ls.str展示内存中所有对象的详细信息
length返回对象中元素的个数
names显示数据的名称,对于数据框则是列名字
levels因子向量的水平
dim数据的维度
nrow矩阵或数据框的行数
ncol列数
rownames数据的行名字
colnames列名字
class数据类型
mode数据模式
head数据的前n行
tail数据的后n行
summary显示对象的概要
attrx的属性类型
  
is.na检测变量的类型
is.null
is.array
is.data.frame
is.numeric
is.complex
is.character

简单统计:

max最大元素
min最小元素
range最小值和最大值组成的向量
sum
prod元素连乘
pmax向量间相同下标进行比较最大者,并组成新的向量
pmin向量间相同下标进行比较最小者,并组成新的向量
cumsum累积求和
cumprod连乘
cummax最大
cummin最小
mean均值
weighted,mean加权平均数
median中位数

 

sd标准差
norm正态分布
fF分布
unif均匀分布
cauchy柯西分布
binom二项分布
geom几何分布
chisq.test卡方检验,进行独立性检验
prop.test对总体均值进行假设检验
shapiro.test正态分布检验
t.testT检验,对总体均值进行区间估计
aov方差分析
anova一个或多个模型对象的方差分析
 
2、向量

向量在循环语句中较为广泛

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. #向量  
  2. #向量在循环语句中较为广泛  
  3. M=vector(length = 8);M  #生成一个长为8的布尔向量  
  4. M[1]="1";M             #赋值之后就会定义为字符  
  5. M[1]=1;M              #赋值之后,定义为数值  

逻辑向量使用

 

 

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. y[y < 0] <- -y[y < 0]      #表示将向量(-y)中 与向量y的负元素对应位置的元素 赋值给 向量y中 与向量y负元素对应的元素。作用相当于: y <- abs(y)  



3、数据储存形式

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. #数据储存形式  
  2. data.frame(wi=iris,ci=cars)   #数据框形式,可以直接定义变量名  
  3. list(wi=iris,ci=cars)         #list,也可以直接定义变量名  

 

注意:attach()、detach()

可以将数据框中的变量释放到Rs内存中,然后就可以直接调用。

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. attach(iris)  
  2. names(setosa)     
  3. detach(iris)  

在data.frame中,是可以实现数据集重命名的,比如data.frame(x=iris,y=cars),

也可以实现横向、纵向重命名,data.frame(x=iris,y=cars,row.names=iris)

 

 

4、数据查看函数——names、str、unique组合、typeof()、mode()、class()

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. ##数据查看函数  
  2. names(iris)           #查看所有变量名字  
  3. str(iris)             #变量属性(int整数,num数值)  
  4. unique(iris$setosa)   #查看分类变量的水平  
  5. table(iris$setosa)    #分类水平,不同水平的个数(=unique+sum功能)  
  6. summary(iris)         #所有变量各自的均值、分位数、众数、最大、最小值等统计量,在回归中就是系数表等  
  7. attributes(iris)      #包括names(变量名)、row.names(序号的名称)、class(数据形式)  

 

一般names、str、unique会组合使用。

 

 

如何查看数据类型——typeof()、mode()、class()的区别?

 

 

 

[plain] view plain copy
 
 
 
 print?在CODE上查看代码片派生到我的代码片
  1. 我这里用个因子例子来说明,希望能讲清楚  
  2. > gl(2,5)            #新建一个因子  
  3. [1] 1 1 1 1 1 2 2 2 2 2  
  4. Levels: 1 2  
  5. > class(gl(2,5))   #查看变量的类,显示为因子;  
  6. [1] "factor"  
  7. > mode(gl(2,5))     #查看数据大类,显示为数值型;  
  8. [1] "numeric"  
  9. > typeof(gl(2,5))    #查看数据细类,显示为整数型;  
  10. [1] "integer"  
  11. #来自:http://f.dataguru.cn/thread-99785-1-1.html  

从精细度上说,typeof>mode>class. 

 

 

5、矩阵的基本知识与注意

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. #矩阵的基本知识  
  2. t()       #转置  
  3. det()     #行列式,方阵  
  4. x%*%y     #向量内积  
  5. x%o%y#向量外积  
  6.   
  7.   
  8. A=array(1:9,dim=c(3,3))  
  9. A*A    #这个代表矩阵内两两子元素相乘  
  10. A%*%A #才是我们想要的结果  
  11. crossprod(A,A)    #等于t(A)%*%A  
  12. crossprod(t(A),A) #等于A%*%A,所以需要t(A)一下  

 

 

t矩阵转置
rowsum行求和
colsum列求和
rowmeans行平均
colmeans列平均
solve对线性方程求解或求矩阵的逆
diag对角阵

 

6、因子

 

[plain] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. ##因子(≈文本+数字的组合)  
  2. #SPSS中值标签定义有异曲同工之妙  
  3. M=factor(iris$setosa,levels=c(1,0),labels=c("M","F"));M  #能够转化因子格式+定义值标签  
  4. M=as.factor(iris$setosa);M #上面的函数更有效,因为as.factor只能转化成因子格式  

 

7、输入输出

 

library加载包
data加载制定数据集
load加载save或者save.image保存的数据
read.table读取表格
read.csv读取以逗号分割的表格
read.delim读取以tab分割个表格
read.fwf以fixed width formatted 形式读取数据至表格
save二进制保存指定对象
save.image二进制保存当前线程内所有对象
write.table将数据以表格形式写入文本
write.csv将数据以CSV表格形式写入文本
cat强制转化为字符后输出
sink输出转向到指定文件
print输出屏幕
format格式化

 

 

8、逻辑运算

 

 

!x逻辑非
x & y逻辑与
x && y逻辑与(仅匹配并返回第一个值)
x | y逻辑或
x || y逻辑或(仅返回第一个值)
x or (x,y)异或

发表评论 评论 (1 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

返回顶部