#r语言(二)笔记

#早复习

#概述:R是用于统计分析、绘图的语言和操作环境
 #对象:
 #数据类型--统称为对象
 #向量(vector):用于存储数值型、字符型或逻辑型数据的一维数组。
 #定义向量:
 v<-1
 v1<-c(1,2,3) 或者 assign('v1',c(1,2,3))
 v<-1:10 #1~10
 is.vector(v)
 #向量的输出: 
 v 或者 print(v1)
 #向量的操作函数:
 #排序:sort(v1) 倒序: rev(v1) 
 #最大值 最小值 平均值 
 max(v1) min(v1) mean(v1)  #矩阵(matrix):矩阵是二维数组,可以描述二维数据
 #定义矩阵
 #dim函数(拆分向量)
 m1<-1:100 
 dim(m1)<-c(10,10) 
 #matrix函数 
 m2<-matrix(1:6,2,3)
 m3<-matrix(1:6,3,2)
 #array函数
 m4<-array(1:30,dim=c(5,6))
 #矩阵下标
 m4[2,2]
 #矩阵相乘 %*%
 m2%*%m3
 #矩阵转置
 m4<-matrix(1:24,4,6)
 aperm(m4)  #数组(array):数组与矩阵类似,是矩阵的扩展,维度≥3.
 #定义数组
 #dim函数
 a1<-1:24
 dim(a1)<-c(3,4,2)
 #array函数
 a2<-array(1:60,dim=c(3,4,5))
 #数组下标
 a2[1,1,2]
 #自定义对象:
 #添加属性方法
 #man1<-c() #内容为空的对象,null不能有属性的
 man1<-c(100)
 attributes(man1) #查看属性
 attr(man1,'name')<-'bai'
 attr(man1,'dept')<-'sxb'
 #list方法(json)
 man2<-list(name='zhw',dept='sxb',child.count=1,child.name=c('3.0'))
 #获取对象属性:$
 man2$name
 man2$child.name; #分组统计
 course<-c('语文','数学','英语','数学','英语','英语');
 score<-c(100,20,50,30,50,48)
 statef<-factor(course) #分类因子
 tapply(score,statef,max);
 tapply(score,statef,min);
 tapply(score,statef,mean);
 tapply(score,statef,var); #其他
 help.start();
 rm(list=ls()) #清空所有对象
 objects() #查看所有对象
 is.xxx #判断类型
 as.xxx #转换类型###注释
#控制语句
 #条件语句
 #if-else语句
 # if 
 num<-3
 if(num==3) print('num==3')
 if(num==3){print('num==3')} #if else
 num<-2
 if(num!=3)print('num!=3') else print('num==3') #else if 
 if(num==1){
 print('num==1') 
 }else if(num==2){
 print('num==2')
 }else{ ##上一个结束大括号一定要和else 在同一行,否则报错
 print('其他')
 }
 #ifelse
 x<-1
 ifelse(x>2,y<-2*x,y<-3*x) ## 三目运算符  #switch语句 switch(expr, list)
 #用法1 expr为数值型
 num<-5
 switch(num,'值为1','值为2','值为3','值为4')# 数值大小,对应的list的项
 switch(2,'值为1','值为2','值为3','值为4')
 switch(2*2,5-4,5+4,5/4,5*4) #第一个参数 可以为 运算符
 #用法2 expr为字符串 list为有名定义时
 mylike<-'水果';
 switch(mylike,水果='苹果',蔬菜='茄子') #已知mylike值水果,它会找有名list中是否有这个元素,并把内容显示出来 #循环语句
 #for语句
 for( i in 1:10) print(i) #js
 for( j in 1:10) print(1:j) #while语句
 i<-1;
 while(i<10){
 print(i)
 i=i+1
 } #repeat语句 #loop
 repeat{
 i=i-1
 print(i)
 if(i<0)break;#跳出循环的条件 
 }  
#自定义函数
 #myfunction <- function(arg1, arg2, ... ){
 #statements
 #return(object)
 #}#函数体通常包含三部分:
 #1异常处理
 #2内部处理过程 
 #3返回值 #例子1 随机数产生,画图
 #rnorm(n,mean,sd)n:随机数个数mean:期望 sd:方差 function11 <- function(){
 x <- rnorm(100)
 y <- rnorm(100,2,3)
 plot(x,y)
 return(x+y)
 }
 function11()#有两个参数
 function12 <- function(x,y){
 plot(x,y)
 return(x+y)
 }
 x <- rnorm(100)
 y <- rnorm(100,2,3)
 function12(x,y) #例子2 计算标准差

myfunc2<-function(x) { 
 #异常处理 
 if(!is.numeric(x)){ 
 stop("输入的值不是数值型\n")
 }
 if(length(x)==1){
 stop("请输入个数大于一位的向量\n")
 }
 result<-sqrt(sum((x-mean(x))^2)/(length(x)-1)) 
 return(result) 
}myfunc2(c('a','b'));
### 后续 debug(myfunc2);
#基本绘图技巧
 #绘制图
 x<-1:100
 y<-100+x*5
 plot(y)
 plot(y,type='l') #绘制一千个正态分布随机数的频率直方图
 x<-rnorm(1000,30,10)
 hist(x)

 #使用核密度估计函数density(),在直方图上绘制密度曲线
 #hist()函数必须设置freq参数为F才能显示密度曲线 x<-rnorm(1000,30,10)
 hist(x,freq=F) # F 是 FALSE 的简称 区分大小写
 lines(density(x),col='red')
 box() #加一个方框 # 茎叶图很直观的表现出数据的分布情况
 x <- rnorm(100,5,1)
 stem(x) # 绘制10个正态分布随机数的条形图
 x <- rnorm(10,30,10);barplot(x)
 box() # 在当前图上加个方框 # 绘制饼图
 x <-1:5;pie(x,col=rainbow(5))
 box() # 绘制箱线图
 # 中间黑线为中位数位置;上下框线为上下四分位数位置;上下触须为1.5倍四分位数间距;如果有孤立点表示异常值
 x <-rnorm(10,10,3);boxplot(x) 
 # 根据指定函数绘制指定范围的曲线图
 curve(sin, -2*pi, 2*pi, xname = "t")#金融数据获取
 #从雅虎金融等数据网站获取:各国股票、股指、债券、ETF基金、汇率、金属、期权等交易品种历史数据和上市公司年报数据# 不设置来源则默认从雅虎金融下载;
# 雅虎金融上大量指数品种都以"^"开头
# from,to参数设置读取历史数据的时间段library(quantmod)
getSymbols('^GSPC',src='yahoo',from='2000-1-1',to=Sys.Date());print(head(GSPC))
print(tail(GSPC))getSymbols('AAPL',src='yahoo',from='2000-1-1',to=Sys.Date());
print(head(AAPL))
print(tail(AAPL))getSymbols('CFTLF',src='yahoo',from='2000-1-1',to=Sys.Date());
print(head(CFTLF))
print(tail(CFTLF))#晚总结