1. 程式人生 > >#r語言(二)筆記

#r語言(二)筆記

查看 控制語句 objects stop 來源 plot 方差 一維數組 環境

#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))


#晚總結

#r語言(二)筆記