日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

R语言课程资料

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 R语言课程资料 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一節 R語言簡介

  • R語言簡介

R 既是一種語言(R是一種解釋性語言),也是一個軟件由AT&T貝爾實驗室的S語言發展而來具有統計分析功能和強大的作圖功能開源軟件

目前在 R 網站上有 17500個程序包,涵蓋了基礎統計學、社會學、經濟學、生態學、地理學、醫學統計學、生物信息學等諸多方面.

  • R語言的優勢
  • ?開源免費???提供豐富的統計分析工具??可以運行在多種平臺,Windows、Linux、Mac

  • R語言參考書籍:《數據挖掘與R語言》?《R語言實戰》?《R語言編程藝術》
  • R軟件的下載與安裝
  • R-GUI編輯環境:網站http://cran.r-project.org/?或 Download R for Windows
  • RStudio是用于R語言開發的一個簡單而功能強大的圖形界面工具,下載地址https://www.rstudio.com/products/rstudio/download/
  • ?

    二.Rstudio

  • Console:命令窗口,Tab、向上、向下鍵輔助輸入。
  • 文本編輯窗口:保存程序命令
  • Environment:顯示當前程序用的對象
  • History:顯示歷史命令,可以to console
  • File:文件存儲路徑
  • Plots:顯示圖形
  • Packages:加載的包
  • 幾個常用的命令
  • (1)工作路徑設置

  • 菜單命令
  • setwd(“d:\\mywork”) ??setwd(“d:/myword”)
  • getwd() 獲取工作路徑
  • (2)歷史命令

  • 向上、向下或者Ctrl+p、Ctrl+N
  • (3)其他命令

  • ls()列出內存中對象
  • rm(list=ls(all=TRUE)) 把當前環境中的對象全部刪除
  • search()列出所加載的包
  • help()幫助命令 ??或 ?使用“?”
  • (4)注釋顯示亂碼?File ??Reopen with Encoding...

    (5)修改界面顯示字體、快捷鍵、R版本?tools

    2. 包package

    作用:特定的分析功能,需要用相應的程序包實現。例如:做生存分析,要用到 survival 程序包; 做meta分析,要用到 meta 包等等。

    是R函數、數據文件、幫助文檔組成的集合。相當于C語言中的庫

    存儲包的目錄稱為庫(library)。

  • 包下載
  • 從官網下載,安裝本地包

    install.packages() ???????????打開安裝包目錄

    install.packages(“包名”) ???安裝一個包

  • 包加載(包卸除:detach(“package:ggplot2”) )
  • library(包名) ??加載一個包

    search() ???????查看已經加載的所有包

  • 查看包的信息
  • help(package=“包名”)

    (1)常用包

    R提供了大量功能各異的包????技術:繪圖類、統計檢驗類、機器學習?

    行業:微陣數據、信用風險建模、社會科學等

  • base: ??基本函數包,包括算術運算
  • boot:自助重復抽樣
  • class:分類算法,包括最近鄰、學習矢量化
  • foreign:讀取其他格式數據包,如SPSS等
  • graphic:基本繪圖函數
  • ggplot2:高級繪圖包
  • 如何安裝R程序包(packages)
  • 在線安裝?install.packages(“package_name")?
  • 離線安裝?https://cran.r-project.org/web/views/
  • 注意:“*.tar.gz”是針對LINUX系統的,“*.tgz”是用于MAC OS的,只有“*.zip”才是用于WIN系統的,這一點非常關鍵。

  • 如何加載R程序包(packages)
  • 使用函數libray(包名)或require(包名)
  • 菜單操作:√右下角的plots旁邊的packages
  • 3 . ?.Rdata和.history

    ?以“.”開頭的文件,通常用作配置,系統默認隱藏這類文件。

  • “.Rdata”是保持工作空間的默認文件。
  • “.history”是保存歷史命令的默認文件。
  • 如果打開Rstudio特別慢,可能是因為.Rdata保存了很大的變量,可以找到.Rdata文件刪掉。

  • Rstudio 輸出結果
  • ?

    第二節 R 語言中的數據對象

    一、數據對象object

    1.數據對象(基本知識)

  • 數據對象:在R中創建和控制的實體,也稱變量;
  • 對象命名 ???以字母開頭,中間可以包含字母、數字、點及下劃線。
  • 區分大小寫

    不能使用關鍵字,如NA ,for 等

  • 對象賦值 ?賦值符號:->、<-、=
  • 對象查詢 ???????查詢所有對象ls()
  • 查詢特定格式對象ls(pat=“m”)

    查詢對象及內容ls.str()

  • 刪除對象 ?rm()
  • 數據對象(類型和屬性)
  • 數據對象的屬性:類型,模式、長度、維度、名稱等;

    數據對象(變量)的類型

    數據對象的類型

    含義

    數值型(numeric)

    整數(integer)、單精度和雙精度(double)

    邏輯型(logical)

    值為TRUE或FALSE

    字符型(character)

    用單引號或者雙引號引用

    復數型(complex)

    a+bi

    原子型(raw)

    二進制形式保存

    3.特殊的數據對象

  • inf ?無窮, 如1/0=inf,即Infinity,無窮大;
  • NaN ?不確定,即“Not a Number(非數)” ?;
  • NA ??缺失或無法得到 ,是“not available”的縮寫;
  • NULL ?空; NA代表位置上的值為空,NULL代表連位置都沒有,變量為空,其長度為0,表明“空無一物”。
  • 對象類型判別與轉換函數
  • 類型

    判別函數

    轉換函數

    數值

    is.numeric()

    as.numeric()

    整數

    is.integer()

    as.integer()

    雙精度

    is.double()

    as.double()

    復數

    is.complex()

    as.complex()

    字符

    is.character()

    as.character()

    邏輯

    is.logical()

    as.logical()

    無窮

    is.infinite()

    -

    有限

    is.finite()a

    -

    不確定

    is.nan()

    -

    缺失

    is.na()

    -

    is.null()

    as.null

    ?

    4.基本運算

  • 四則運算 ?加(+)、減(-)、乘(*)、除(/)、乘方(^)、整除(%/%)、模(%%)
  • 函數運算 ?????初等函數的運算
  • 開方sqrt(),指數exp(),對數log(),三角函數sin(),cos()

  • 邏輯運算 >,<,>=,<=,==,!=,結果為TRUE或FALSE
  • 特殊符號 ???續行符 ?+
  • 多組命令分隔符 ?;

    5.R中數據對象的結構

    R語言中的基本數據結構

    向量

    矩陣

    數組

    數據框

    列表

  • 各數據類型之間的區別
  • 向量:包含一個元素或多個元素;
  • 矩陣:由向量構成,是一個特殊的數組,即維數等于2的數組;
  • 數組:與只能有二維的矩陣不同的是,數組的維數不限,但元素的數據類型必須一致,即數值型都是數值型,字符串都是字符串;
  • 數據框:與數組不同的是,數據框里面的數據類型可以不一致,但向量維數必須相等,即各列數據長度相等;
  • 列表:最寬泛的一個集合,它的數據類型可以不一致,長度也可以不一致,可以由向量,矩陣,數組,數據框,函數,甚至是列表組成;
  • 對象的模式與屬性
  • R數據對象的類別:

  • 原子(atomic):對象元素是同一類型,每個元素不是一個對象,如向量。C(2,4,6,8)
  • 復合(recursive):對象元素可以是不同類型,每個元素是一個對象,如列表,數據框。
  • ????list(c(1,2,3,4,5),c(“A”,”B”,”C”))

  • 對象的屬性
  • R對象都有類型(mode)和長度( length )兩個基本(存儲)屬性

    類型(mode)(表示對象在內存中的存儲類型)

    類型:numeric(數值)、logical(邏輯)、complex(復數)、character(字符)

    如:mode(rep(23,times=100))

    ????????mode(c(1,3,5,7)>5)

    ????????ch1<-rep(c("a","b","c"),times=5)

    ????????dim(ch1)<-c(3,5)

    ????????mode(ch1)

    修改類型

    如:mode(ch1)<-"numeric"

    8.對象的屬性

  • R對象的長度??length()函數????求對象的長度 ?如 :length(x)?????各數據類型的關系(圖)
  • 對象長度賦值 ?如 :length(x)<-5

    R 允許對超出長度的下標賦值,結果是?

    如:x<-numeric()?????????????length(x)???????????length(x)<-5 ????????x[5]<-15

    9.attributes和attr函數

  • attributes(object)函數返回對象object的各種特殊屬性組成的列表,不包括固有屬性mode和length ;
  • x<-c(apples=2.5,orange=2.1);attributes(x)

    f1<-factor(rep(c(1,2),3));attributes(f1)

  • attr函數 獲取或者設置對象的屬性
  • attr(x,which,exact=FALSE)????x:數據對象??which:描述屬性名稱的字符串
  • exact:是否與which精確匹配,邏輯值

    如:attr(x,"names")

    ????attr(x, "type")<-"fruit" ??#給X增加type屬性

    attributes(x)

    10.class屬性

  • 顯示或者設置對象的數據結構類型(class:是一種抽象類型)
  • 如:mat<-matrix(rep(c(1,2,3,4),times=4)) ??class(f1)<-"tree"將f1定義為一種“tree”數據結構

    class(mat)??????????mode(mat) ?#注意二者區別????????

  • class和mode返回值比較
  • class(x):

    • 當x是單個值,或者向量的時候:返回的結果和mode一致,如numeric,character
    • 其他情況(矩陣,數組,日期,因子)

    class返回(matrix,array,Date,factor)

    mode返回(x中元素的類型——在內存中的存儲類型logical(邏輯型)、numeric(數值型)、complex(復數型)、character(字符型) )

    • 當x是數據框的時候,class返回dataframe,mode返回list
    • 當x是列表的時候,class和mode都返回list

    二、向量vector

  • 向量是由相同基本類型的元素構成的序列,是R中最常用的對象,也是R中最基本的數據輸入。
  • 注:單個向量中的數據類型是固定的,比如數值型向量中的元素就必須全為數值,而字符型向量中的元素必須全部為字符。

  • 向量的賦值:
  • x<-c(1,2,3,4,5),其中c()為連接函數???????????????????c(1,2,3,4,5)->x

    assign(“x”,c(1,2,3,4,5)) ????????????????????????????numeric(length)生成初始向量

    1.有規律的向量

    • 等差數列

    a:b 表示從a開始,逐項加1,直到b為止。???????如 1:10表示1 2 3 4 5 6 7 8 9 10

    :運算符優先級高于四則運算 ?如 ?2*1:15??????????????????如 ??1:n-1 表示??

    • 等間隔函數
  • seq(from,to,by,length.out,along.with)
  • from,to 為數值,表示開始和結束?????by為數值,表示間隔

    length.out為數值,表示數列長度??along.with為向量,表示數列長度與該向量長度相等

    • 重復函數
  • rep(x,times,length.out,each,正整數向量)
  • x為數量、向量、數據對象???????????times ,x重復的次數

    length.out,重復后該向量的長度??????each,x中每個分量重復的次數

    正整數向量,x中分量對象重復的次數

    2.邏輯向量

  • 每個分量的值為TRUE或FALSE
  • 連接函數生成邏輯向量 z<-c(T,F,T,T) z1<-c(z,T)

    邏輯運算生成邏輯向量 y<-c(5,6,7,8,9);y>5

  • 邏輯向量的函數??all() 判斷分量是否都為T?????any() 判斷分量中是否有T
  • which()判斷分量中誰為T?????logical()構造初始邏輯向量

  • 向量中的缺失數據
  • NA表示缺失 ??z<-c(1:4,NA)

    is.na(z) 檢測向量中是否有缺失值

    z[is.na(z)]<-0 將缺失數據改為0

  • 字符型向量
  • (1)分量為字符串的向量z<-c("happy","birthday")

    (2)字符向量函數

    character(length=5) 構造初始字符

    is.character(z) 判斷是否為字符型

    nchar() 提取字符向量中分量個數

    6.字符向量函數

    (1)substr(z,start,stop)

    求子串,start,stop取整數或整數向量,分別表示取子串的起始和結束位置。

    如 ?substr(“abcde”,2,4) ??bcd

    ????substr(rep(“abcdef”,4),1:4,4:5)

    ?????"abcd" "bcde" "cd" "de" ???#短向量被重復使用

    2)substr(z,start,stop)<-value

    ???替換子串,start,stop取整數或整數向量,分別表示替換子串的起始和結束位置,value為替換的向量

    ???如:x<-rep("abcdef",4)

    ???????substr(x,2,6)<-c("y")

    ???????string1<-c("生物1","生物2","生物3")

    ???????substr(string1,1,2)<-c("信管")

    (3)paste() ?“粘貼”多個對象

    ???paste(……,sep=“ ”,collapse=NULL),……為一個或多個對象,sep為分隔符

    ???如:paste("Happy","birthday")

    ???????paste("Happy","birthday",sep=",")

    ???????paste("信管2016",1:4,sep="-")

    ???????paste(c("x","y"),rep(c(1,2),each=2))

    (4)strsplit(x,split,fixed=FALSE)

    分解字符向量,x為待分解字符向量,在split出現處分解,fixed為F時表示split精確匹配

    如:strsplit("you are a good boy"," ")

    (5)noquote()

    去掉字符串中的引號

    如:noquote("hello")

    7.用vector生成向量

    vector(mode="logical",length=0)

    mode為生成向量的類型,默認為邏輯型??length為向量長度

    如:vector(length = 3)

    ????vector(mode="numeric",length = 3)

    8.向量的下標

    X[i]

    (1)其中X為向量名,i為下標,x[i]表示向量中第i個分量

    (2)修改某個分量的值??????x[2]<-"aaa”

    (3)向量的正下標表示被選中的分量

    ???x<-10:20;x[c(1,2,3,4)]

    ???x[c(1,2,3,1)]

    ???c("a","b","c","d")[rep(c(2,1,3),3)]

  • 向量的負下標表示被排除的分量?????x<-10:20;x[-c(1,2,3,4)]
  • (5)邏輯下標

    作用:選擇向量中所有邏輯下標為真的分量

    如: x<-c(1,3,6);x[x>5]

    ????????z<-c(-1,1:3,NA);y<-z[!is.na(z)];y

    (6)字符下標

    給向量的分量添加名稱的2種方法

    如: ages<-c(Li=33,zhang=29,Wang=31)

    names()命名函數??如: fruit<-c(5,10,8,11)?;names(fruit)<-c("orange","banana","apple","peach")

  • 與數值向量有關的函數
  • (1)最小值、最大值、范圍

    min(x) ?which.min(x)哪一個最小 ??

    max(x) ?which.max(x)哪一個最大

    range(x)

    (2)求和、求乘積

    ?

    sum(x) ?和

    prod(x) 分量乘積

    length(x) ?分量個數

    中位數 ???median(x)

    均值 ?????mean(x)

    方差 ?????var(x)

    標準差 ???sd(x)

    向量排序 ?sort(x)

    保留小數 ?round(x,digit)

    隨機數 ???runif(n,min,max) ??

    round(3.555,2) #保留兩位小數

    runif(50,1,20) #產生50個1-20之間的隨機數

    ?

    ?

    • 因子Factor

    1.因子

    minzu<-c("漢族","維吾爾","回族","維吾爾","漢族")

    grade<-c("及格","優秀","不及格","優秀","良好")

    score<-c(67,88,57,93,78)

    類別:沒有順序之分的類別向量,如民族

    有序:表示順序關系的向量,如等級

    連續:某個范圍內的任意值,同時表示數量和順序,如分數

    因子:類別和有序向量稱為因子

    2.Factor函數

    作用:將一個向量轉換成因子

    格式

    factor(x,levels,labels=levels,exclude=NA,ordered=is.ordered(x))

    ?

    x:被轉換的向量

    levels:因子水平,可以為空

    labels:各水平的名字,可以為空

    exclude:從x中剔除的水平值

    ordered:因子水平是否有序,TRUE 或者FALSE

    ?

    例:

    data<-c(1,2,3,3,1,2,2,3,1,3,2,1) ??#數值向量

    fdata<-factor(data)

    grade<-c("優","良","差","差","優","良","良","差","優","差","良") ??#字符向量

    fgrade<-factor(grade)

    3.gl函數

    生成因子

    (1)gl(n,k,length=n*k,labels=1:n,ordered=FALSE)

    ?

    n: 水平個數,整數

    k: 重復次數,整數

    length:因子向量的長度

    labels:因子的水平名稱

    ordered:是否有序

    ?

    (2)levels()

    查看因子的水平 ???levels(fdata) ?

    例:gl(3,5) ?#3個水平,每個水平重復5次

    gl(3,5,labels=c("A1","A2","A3")) ?#帶名稱的因子

    gl(3,5,labels=paste("A",1:3,sep="")) ??#因子的名稱用paste函數生成

    4.與因子有關的函數

    (1)table函數

    統計因子向量中各水平出現的頻數 ????table(fdata)

    (2)tapply函數

    不同水平下指定函數的計算

    tapply(x,index,fun,simplify=TRUE)

    ?

    x:計算對象,向量 ????index:與x長度相同,表示x的因子水平

    fun:需要計算的函數 ??simplify:返回值類型,T表示數組,F為列表

    ?

    • 矩陣

    1.矩陣的生成

    (1)matrix(data, nrow, ncol, byrow, dimnames)

    ?

    data:數據向量

    nrow:矩陣的行數

    ncol: ?矩陣的列數

    byrow:邏輯值,T表示行序為主序,F表示列序為主

    dimnames:行、列名稱,列表格式

    ?

    如:

    mdat<-matrix(c(1,2,3,4,5,6,7,8,9,0),nrow=2,byrow=T,dimnames=list(c("row1","row2"),c(“C1”,”C2”,”C3”,”C4”,”C5”)))

    (2)dim函數

    設置或求矩陣的維數

    如:dim(mdat)

    ???x<-1:12 ?; ???dim(x)<-c(3,4)將向量X以列序為主序設置為矩陣

    2.與矩陣運算有關的函數

    ?

    (1)求矩陣的維數

    dim() ????求矩陣的行列數

    nrow() ??求矩陣的行數

    ncol() ????求矩陣的列數

    ?

    (2)矩陣的合并

    rbind() ??對矩陣按行合并,要求子矩陣有相同列數

    如: x1<-c(1,2,3,4,5,6)

    ????????x2<-c("a","b","c","d","e","f")

    ????????dim(x1)<-c(2,3)

    ????????dim(x2)<-c(2,3)

    ????????rbind(x1,x2)

    cbind() ?對矩陣按列合并,要求子矩陣有相同行數

    (3)矩陣的拉直

    as.vector() 將矩陣轉換為向量

    如:as.vector(mat)

    (4)矩陣行列的命名

    rownames() ?求矩陣行名,或為其命名

    colnames() ???求矩陣列名,或為其命名

    如:mdat<-matrix(c(1,2,3,4,5,6,7,8,9,0),nrow=2,byrow=T)

    rownames(mdat)<-c("row1","row2")

    colnames(mdat)<-paste("C",1:5,sep="")

    3.矩陣下標

    使用矩陣下標訪問矩陣元素,如同C語言中的二維數組,下標從1開始

    如:A[1,2] 表示行下標為1,列下標為2的矩陣元素值

    A[1,] 表示行下標為1的整行元素

    A[,-2] ??表示矩陣去掉列下標為2的元素剩下的元素

    4.數組的生成(2種方法)

    (1)array(data=NA,dim=length(data),dimnames=NULL)

    ?

    data:數據向量

    dim:數組各維長度,整數向量,默認為data長度

    dimnames:各維的名稱,列表的形式

    ?

    如:data<-rep(c(1,3,5,7),times=5) ????x<-array(data,dim=c(5,4))

    ????x1<-array(data,dim=c(2,5,2))

    (2)dim()構造數組

    x2<-1:24

    dim(x2)<-c(3,4,2)

    dimnames對各維命名

    dimnames(x2)<-list(c("row1","row2","row3"),c("col1","col2","col3","col4"),c("z1","z2"))

    5.數組下標

    使用下標對數組元素訪問

    ?

    a<-1:20

    dim(a)<-c(4,5)

    a[1,3];a[1,];a[1,2:3]

    ?

    6.apply函數

    對矩陣或數組按照維度做運算

    apply(x,margin,fun)

    ?

    x:數組或矩陣

    margin:做運算的維度,1表示行,2表示列

    fun:運算函數

    ?

    如:A<-matrix(1:6,nrow=2);A?????????sum(A);sum(A[,2])?????????apply(A,1,sum)

    ?

    • 列表list

    列表的元素類型可以是任意對象,可以是不同類型。

    1.列表的構造

    list(成員列表)

    如:st<-list(name="Fred",wife="Mary",no.children=3,child.age=c(2,4,7))

    stu<-list(name="張三",class1=c("高數","計算機","體育","英語"),intrests=c("繪畫","唱歌"))

    2.列表成員的訪問

    列表名[[下標]] ?????如:lst[[1]];stu[[2]];stu[[2]][2]

    每次只能訪問一個成員,不能同時訪問多個

    列表名[下標]表示一個子列表 ???如:lst[1]

    列表名[[“成員名”]] ??????????如:lst[[“name”]]等價 lst[[1]]

    列表名$成員名 ???????????????如: lst$name等價 lst[[1]]

    六、數據框data.frame

    矩陣形式,各列類型不同。列為變量,行為一個觀測樣本。

    1.數據框的生成

    (1)data.frame函數

    df<-data.frame(

    ????????????????Name=c("Alice","Becka","James","Jeffrey"),

    ????????????????Sex=c("F","F","M","M"),

    ????????????????Age=c(13,13,12,13),

    ????????????????Height=c(56.5,65.3,57.3,62.5),

    ????????????????Weight=c(84,98,83,84))

    (2)as.data.frame將其他數據結構轉換成數據框

    lst<-as.data.frame(lst)

    2.數據框的引用

    數據框元素的引用與矩陣元素的引用方法相同

    使用下標???????????????????df[1:2,3:4] ;df[,1] #使用下標

    使用變量名稱???????????????df[[“Name”]];df[,“Name”];df[“Name”];df$Name

    3.數據框的命名

    將名稱向量賦予列或行

    變量(列)命名 ?????names(df)<-paste("col",1:5,sep = "")

    行命名 ?????rownames(df)<-c("row1","row2","row3","row4")

    rownames(df)<-df[,1] ??

    3.attach函數

    將數據框“連接”到內存中,便于調用 ??attach(df)

    r<-Height/Weight

    給數據框增加新的變量 ???數據框名$新變量<-值 ?如:df$r<-Height/Weight

    刪除變量:數據框名$新變量<-NULL

    取消“連接” ??detach(df)

    4.lapply()函數與sapply()函數

    ?

    (1)lapply()

    lapply(x,fun)

    lapply(lst[3:5],mean); lapply(lst["Age"],mean)

    lapply(df[,3:5],mean)

    ?

    (2)sapply()

    sapply(x,fun)

    sapply(lst[3:5],mean); sapply(lst["Age"],mean)

    sapply(df[,3:5],mean)

    ?

    5.apply,sapply,lapply,tapply,vapply, mapply

    apply : 用于遍歷數組中的行或列,并且使用指定函數來對其元素進行處理;
    lapply : 遍歷列表向量內的每個元素,并且使用指定函數來對其元素進行處理。返回列表向量;
    sapply : 與lapply基本相同,只是對返回結果進行了簡化,返回的是普通的向量;
    mapply: 支持傳入兩個以上的列表;
    tapply: 接入參數INDEX,對數據分組進行運算,就和SQL中的by group一樣。

    ?

    第三節程序控制結構

    一、分支函數

    1.if / else函數??多用于兩分支

    格式1:if (cond) expr

    ??????????????如果cond條件成立,則執行expr,否則跳過

    格式2:if (cond) cons.expr ?else ?alt.expr

    ??????????????如果cond條件成立,則執行expr,否則執行alt.expr

    2.if / else函數的嵌套

    if (cond) expr

    else if (cond_1) ?expr1

    else if (cond_2) expr2

    else expr3 ?????????

    3.R語言中的if-else語句寫法

    結構 ?1 : ?if() ?xx ?else ???yy ???一行;

    結構 ?2: ??if() ?{xx} else ?{yy} ?????????????????

      或者 ??if(){ ?

    ??????????????? xx ?????????????????????????

    }else ???#此處不能兩行寫 ????????????????????????

    yy

    結構3: ?{

    if ???

    else ?

    }

    結構3,括號可以任意寫。

    4.switch函數

    用于多分支

    格式:switch(expr,list)

    ?????????expr表達式,List列表

    表明:如果表達式的值在length(list)之間,則返回列表中對應表達式位置上的值。

    如:switch(1,"a","b","c")

    如果list有元素名,expr等于元素名時,返回變量名對應的值

    y<-"fruit" ?

    switch(y,fruit="banana",vegetable="broccoli",meat="beef")

    二、循環函數

    1.for函數

    格式:for(var in seq) expr

    ?var:循環變量 ?????????seq:向量表達式,如1:20 ???????expr:一組表達式

    2.while函數

    格式:while (cond) expr

    例如:編寫計算1000以內的Fibonacci數

    ????????f(i)=f(i-1)+f(i-2)

    f<-c(1,1);i<-1

    while(f[i]+f[i+1] < 1000){

    ??f[i+2]<-f[i]+f[i+1]

    ??i<-i+1

    }

    3.repeat函數

    格式:repeat ?expr

    ???結合break語句跳出循環

    例:i<-10

    repeat{

    ??print("hello") ;i<-i-1

    ????if (i<0) break

    }

    4.中止語句與空語句

    中止語句break ??強行中止,跳出循環

    三、R程序設計

    1.函數定義

    格式:funname<-function(arg_1,arg_1,……)expression

    ?

    funname:函數名

    arg_1,arg_2:函數參數

    ?expression:表達式

    ?

    2.函數調用

    格式:funname(expr_1,expr_2)

    注意:在編輯器中編寫和保存使用時,需要調用函數所在的腳本文件 ???

    ????????source(“funname.R”)

    ????????funname()

    3.無參數函數

    ??執行時不需要輸入參數,每次執行,返回值都相同。

    例如:welcome<-function()

    ????????print(“welcome to use R”)

    調用:source(“welcome.R”)

    ???????welcome()

    4.有參數的函數

    函數名<-function(){

    ……

    返回值計算表達式

    }

    5.有名參數

    函數調用時,如果參數沒有名稱,需要按照定義順序設置參數;

    函數調用時,可以指定形參和實參的對應關系,此時順序可以不按照定義時;

    如 fun1<-function(data,data.frame,graph,limit)

    ??調用 ans<-fun1(d,df,TRUE,20)

    ????????ans<-fun1(d,df,graph=TRUE,limit=20)

    ????????ans<-fun1(data=d,limit=20,graph=TRUE,data.frame=df)

    6.遞歸函數

    (1)遞歸函數:自身調用自身,在函數體內增加一個計算結果的變量

    如:向量的求和公式編寫

    例:求n的階乘

    (2)類似函數不用編寫,R自帶很多相應函數

    Browser()調試提示符窗口上方的導航按鈕實現下一步操作:
    第一個按鈕是Next(下一步) 用來運行函數的下一行代碼;
    第二個按鈕是Continue(繼續) 用來運行函數剩余的所有代碼,完成之后退出瀏覽器模式;
    第三個按鈕是Stop(停止) 他會立刻中斷并退出瀏覽器模式,不運行任何代碼;

    7.作用域

    全局變量

    x<-10;y<-20 ?????????#x,y全局變量

    f<-function(y) ?x+y ??#y為局部變量 ????????f(10)

    8.程序調試

    (1)print()顯示變量內容的函數

    使用print()函數顯示變量的值

    如:f<-function(y){

    ???????????print(x);print(y);x+y

    ????????}

    ??????f(y)

    ??????f(10)

    (2)cat()函數

    f<-function(y){

    ??cat('x=',x,'\n');cat('y=',y,'\n');x+y

    }

    (3)跟蹤程序的函數

    browser():在程序體內增加該語句,單步調試;

    debug():函數運行前增加debug(函數名),標記函數進行測試;

    外部文件的讀寫

    ?第四節 外部文件的讀寫

    一、外部文件的讀寫

  • 實際應用數據的分析往往是外部文件存儲
  • 計算結果應當保存成外部文件:讀寫文件首先需要設置工作路徑,確保操作文件在工作路徑下。
  • setwd(“工作路徑”)???????getwd()
  • 二、純文本文件

    1.read.table()函數?????讀取表格形式的文件read.table(file,header=True,sep=“”,row.names,col.names,skip,nrows)

    ?

    file:讀入數據文件名,數據以表格形式(純文本文件)保存在文件中。

    header:數據文件中有表頭,則為T。

    sep:數據分隔字符

    row.names:行名

    col.names:列名(變量名)

    skip:讀數據時跳過的行數,非負整數。

    nrows:讀取的行數

    ?

    例:體會以下代碼的含義

    data_stu<-read.table("stu.txt",header=T)

    data_stu

    data_stu<-read.table("stu.txt",header=T,row.names = paste("201601",1:5,sep=""))

    data_stu<-read.table("stu.txt",header=F,skip=2)

    2scan()函數

    直接讀純文本文件

  • scan(file,sep="",skip)
  • ?

    file:讀取的文件名

    sep:為分隔符

    ?

    例:data_stu1<-scan(file="data.txt")

    2.read.fwf()

    將固定寬度格式的文本文件讀入R

    read.fwf(file,widths,header,sep,skip,row.names,n)

    ?

    file:讀入文件名

    widths:整數向量,每個值表示讀入變量的?????????????寬度

    header:是否有變量名

    sep:分隔變量名的符號

    skip:文件頭部跳過的行數

    row.names:行名的向量

    n:讀入R的行數

    ?

    三、Excel文件

    1.read.delim()函數

    需要將Excel文件轉換為文本文件(制表符分隔)后讀取

    read.delim(file,header)

    file :文件名 ?????header:是否有表頭,值為True或者False

    2.read.csv()函數

    需要將Excel文件轉換成CSV(逗號分隔)文件

    read.csv(file,header)

    3.直接讀取Excel數據表

  • 安裝包RODBC
  • 使用odbcConnectExcel()函數完成ODBC庫與數據表的連接
  • sqlTables()函數獲取數據表信息
  • 讀取數據:sqlFetch() ???????sqlQuery()
  • 關閉連接close()
  • 外部文件的讀入-Excel文件
  • install.packages(“RODBC”)

    library(RODBC)

    con<-odbcConnectExcel(“scores.xls”)

    tbles<-sqlTables(con)

    sh1<-sqlFetch(con,tbls$TABLE_NAME[1])

    qry<-paste(“select * from [“,tbls$TABLE_NAME[1],”]”,sep=“”)

    shc<-sqlQuery(con,qry)

    close(con)

    四、其他軟件格式數據文件

    可以讀取SPSS\SAS\S-PLUS和Stata數據文件

    1)必須先加載foreign數據包 ????2)read.spss(file)

    注:對于大型數據的讀取可以使用readr包和readxl包,速度比read.table()快很多。

    五、數據集的讀取

    1.R提供了100多個數據集

    2.使用data()函數查看或加載數據集

  • library(“pknames”)加載程序包
  • data() ?????????????查看數據集
  • data(dataname) ?????加載數據集
  • 試著加載并讀取數據集iris
  • 六、寫數據文件

    1.write()函數

    write(x,file,ncolumns,append)

    x:需要寫入文件的數據,通常為矩陣或向量

    file:要保存的文件名

    ncolumns:列數,字符默認1,數值默認5

    append:邏輯變量,為T表示在原有文件添加數據,F表示新文件

    2.write.table()與write.csv()

    將數據寫為表格形式的文本文件或者CSV格式文件

    write.table(x,file,append,sep)

    sep:為分離數據的字符

    總結

    以上是生活随笔為你收集整理的R语言课程资料的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。