R(一): R基礎知識

来源:http://www.cnblogs.com/tgzhu/archive/2016/08/14/5750658.html
-Advertisement-
Play Games

R 是一門擁有統計分析及作圖功能的免費軟體,主要用於數學建模、統計計算、數據處理、可視化等方向。據 IEEE Spectrum發佈的2016年編程語言前10位排名來看,R語言由2015年排名第6位上升級2016年的第5位。目前在CRAN 上發佈的演算法包已經超過8000+多個。R體系涉及到高等數據、概 ...


      R 是一門擁有統計分析及作圖功能的免費軟體,主要用於數學建模、統計計算、數據處理、可視化等方向。據 IEEE Spectrum發佈的2016年編程語言前10位排名來看,R語言由2015年排名第6位上升級2016年的第5位。目前在CRAN 上發佈的演算法包已經超過8000+多個。R體系涉及到高等數據、概率學、統計學、IT技術等多種知識的綜合應用,雖然看起來超級複雜,但學過程還是得從基礎開始。

    解釋:CRAN (The Comprehensive R Archive NetWork): 提供下載軟體安裝程式和相應軟體包的網站,訪問地址:https://www.r-project.org/

附圖2016年編程語言排名:來源於 http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016

 目錄:

  • R語言特點
  • R語法規範
  • R工作原理
  • R數據類型
  • R對象類別
  • R對象判斷轉換
  • R運算符
  • R特殊值
  • R迴圈語句
  • R工作空間
  • R幫助

R語言特點:


  • 靈活、開發、免費
  • R是一種解釋性語言
  • R區分大小
  • 幫助系統很贊,開發查找方便
  • 數量眾多的演算法功能包(8000+擴展包),還不包括在github上的開發包
  • 支持在UNIX、 Windows and MacOS多種系統上運行
  • 高質量、廣泛的統計分析、數據挖掘

R語法規範:


  • 對象的命名以"."或字母開頭,當以"."開頭時,第二個字元不允許是數字
  • 基本命令要麼是表達式,要麼是賦值。如果命令是表達式,它被解析後,結果顯示在屏幕同時清空命令所占記憶體。賦值被解析後,將值傳給變數結果不顯示。
  • 命令以";"分隔或另起一行,註釋以"#"標註
  • 當一條命令在一行結束時還沒不完整,R會結出延續提示符,預設是"+"
  • 與其它語言相比,R有個比較個性的賦值表達方式(即箭頭賦值符號),至於此表達方式的來源,在謝老師的一篇文章中有介紹,請參見http://yihui.name/cn/2012/09/equal-and-arrow/
  • 開發過程中的編碼規範約定,可參見google的R語言編碼風格指南,如下圖(詳細參見:http://bbs.pinggu.org/thread-1410518-1-1.html

R工作原理:


  • 當R在運行時,所有的變數、數據、函數及結果都是以對象的形式存在於電腦的活動記憶體中,期間進行的所有操作都是針對活動記憶體中的對象,如下示意圖
  • 用戶通過輸入一些命令調用函數,分析得出的結果可以直接顯示在屏幕上,也可以直接存入某個對象或寫入磁碟,因為產生的數據本身就是一種對象,所以它們也能被視為數據並能象其它數據一樣被處理分析。數據的輸入文件可來源於本地磁碟,也可以是從遠程服務端獲取
  • 上圖中示意的所有的R 函數都包含在某個庫里 (library), 我們從CRAN上下載的程式包被調用的時候,都要通過 library(包名)先載入到記憶體,再被使用,後面會詳細介紹。
  • 在R軟體安裝包里自帶的 base 庫是R的核心,在啟動R時會自動載入,它包含瞭如:數據讀寫、數據運算等基本操作。

R數據類型:


  •  數據型:Numeric  
  •  字元型:Character
  •  邏輯型:Logical
  •  因數型:Factor   (表示不同類別,在下麵的內容中會舉例來說明)
  •  複數型:Complex

R對象類別:


  • 向量(Vector): 線性代數裡面我記得又稱為矢量,它表示一系統元素的組合。(註意:向量裡面的元素類型必須一致,不一致時會自動進行轉換),如下圖示例
  • 因數(Factor): 為處理分類數據提供的一種有效方法,概念難懂,結合以下代碼說明
    #取10名考生所在的省賦給變數province
     province <- c('四川','湖南','江蘇','四川','四川','四川','湖南','江蘇','湖南','江蘇')
     
     #創建因數, 並查看因數輸出結果
     pf <- factor(province);pf
     
     #錄入每位考生的分數
     score <- c(95,86,84,92,84,79,86,99,85,90)
     
     #計算各省的平均成績,併在屏幕顯示
     tapply(score,pf,mean)
  •  輸出結果如下圖:(這樣應該能明白了吧?)

  • 矩陣(matrix): 一種特殊的數組,是向量在多維度下的一般形式。 用法: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
    1. data為必要的矩陣元素,nrow 為行數,ncol 為列數,註意nrow 與ncol 的乘積應為 矩陣元素個數,byrow 項控制排列元素時是否按行進行,預設是按列,dimnames 給定行和列的名稱
    2. 示例代碼: 1:12表示 1至12 的有序數字序列
      > matrix(1:12,nrow = 3,ncol = 4,byrow = TRUE,dimnames = list(c("Row1","Row2","Row3"),c("col1","col2","col3","col4")))
           col1 col2 col3 col4
      Row1    1    2    3    4
      Row2    5    6    7    8
      Row3    9   10   11   12
      >
  • 數據框(dataframe): 和矩陣類似的結構,列可以是不同的對象。
    1. 使用data.frame函數來初始化一個對象,示例代碼如下:
      > duty <-data.frame(date=c("20160814","2016015","2016016"),
      +                            Name=c("tgzhu","zhangShan","LiShi"),
      +                            Tel=c("13606401549","13606401550","13606401551"))
      > duty
            date      Name         Tel
      1 20160814     tgzhu 13606401549
      2  2016015 zhangShan 13606401550
      3  2016016     LiShi 13606401551
      > 
    2. 在通過讀取本地文件、通過RODBC訪問資料庫訪問的都是 data.frame對象,在後續會以單獨的章節對其包含的操作進行介紹 

  • 列表(list): 一種泛化的向量,沒有要求所有元素數型一致
    1. 通過 list 函數來初始化一個對象,示例代碼如下:
      #無tag 方式
      list("tgzhu",16,TRUE)
      
      #帶tag方式
      list(name="tgzhu",workAge=16,goodMan=TRUE)
      
      #list 嵌套
      list(name="tgzhu",workAge=16,address=list(address="JN",Tel="13606401550"))
    2.  list中元素的訪問:list_name$tag_name、list_name[[tag_name]]、 list_name[[index]]

    3. 註意:list中元素的訪問需要雙層[[]],如果單層[index]或[tag_name]會訪問到tag_name(或者index)與值本身,是個子list,而不僅僅是值;
    4. 雙層[[]]中的只能是單一的tag_name或index,不能是類似[[1:3]]這樣訪問,而單層可以[1:3],提取出1~3作為子list
  • 小結:
    1. R中的數據結構主要面向《線性代數》中的一些概念,如向量、矩陣等
    2. R中其實沒有簡單數據(數值型、邏輯型、字元型等),對於簡單類型會自動看做長度為1的向量

 R對象判斷轉換:

  • R對象判斷函數:其返回值:TRUE或FALSE
    1. is.numeric(): 是否數值型數據
    2. is.character():   是否字元型數據
    3. is.vector():   是否向量數據
    4. is.matrix():  是否矩陣數據
    5. is.data.frame():   是否數據框數據
    6. is.factor():    是否因數數據
    7. is.logical():   是否邏輯型數據
  • 轉換數據類型:函數將輸入參數轉換為對應的類型
    1. as.numeric()
    2. as.character()
    3. as.vector()
    4. as.matrix()
    5. as.data.frame()
    6. as.factor()
    7. as.logical()
    • 簡單示例如下
      > a <- c(1,2,3);a
      [1] 1 2 3
      > 
      > is.numeric(a)
      [1] TRUE
      > 
      > a<-as.character(a);a
      [1] "1" "2" "3"
      > 
      > is.numeric(a)
      [1] FALSE

 R運算符:


  • 算術運算符: + - * /
  • 邏輯運算符: <,<=,>,>=,==,!=, &, |, !
  • 數學函數:log,exp,sin,cos,tan,sqrt,max ,min,range,length,sum,prod,var

R迴圈語句:


  • 條件語句:  if (expr1 ) expr2 else expr3
  • 迴圈控制:for,repeat,while
    1. for語法: for (name in expr1 ) expr2 其中name 是迴圈變數,expr1是一個向量表達式,而expr2常常是根據虛擬變數name 而設計的成組表達式。在name 訪問expr1所有可以取到的值時,expr2都會運行
    2. 註意:相比其他程式語言,R代碼裡面很少使用for(),執行效率很低
    3. repeat expr, while (condition) expr
    4. 關鍵字break:可以用於結束任何迴圈,甚至是非常規的。它是結束repeat 迴圈的唯一辦法。
    5. 關鍵字next:可以用來結束一次特定的循環,然後直接跳入"下一次"迴圈

R特殊值:


  •  在某些情況下,向量的元素可能有殘缺.R為確保所有數據都能被正確識別、計算或統計等,定義了一些特殊值數據
    1. NULL空數據
    2. NA(not available):表示無數據
    3. NaN(Not a Number):表示非數字
    4. inf:數字除以0得到的值,無窮大
  • 斷一個object (x)是不是屬於這些類型有相應的函數:
    1. is.null(x)
    2. is.na(x)
    3. is.nan(x)
    4. is.infinite(x)

R工作空間:


  • 工作空間(workspace)就是當前R的工作環境,它儲存著所有用戶定義的對象(向量、矩陣、函數、數據框、列表) 。在一個R會話結束時,你可以將當前工作空間保存到一個鏡像中,併在下次啟動R時自動載入它
  • 當前的工作目錄(working directory)是R用來讀取文件和保存結果的預設目錄。使用函數getwd()來查看當前的工作目錄,或使用函數setwd()設定當前的工作目錄。
  • 註意:如果需要讀入一個不在當前工作目錄下的文件,則需在調用語句中寫明完整的路徑。記得使用引號閉合這些目錄名和文件名
  • 用於管理工作空間的部分標準命令:
    1. getwd(): get working directory  顯示當前的工作目錄
    2. setwd("yourdirectory"):  修改當前的工作目錄為你指定的目錄地址
    3. ls():  列出當前工作空間中的對象
    4. rm(objectlist):  移除(刪除)一個或多個對象,變通一下: rm(list=ls())  即表示刪除工作空間記憶體中的所有對象
    5. rm(list=ls(pat=“^m”)): 刪除記憶體中以m開頭的變數
    6. options():  顯示或設置當前選項,這個命令很有用,在下麵的章節會用到
    7. save.image("myfile") : 保存工作空間到文件myfile中(預設值為.RData)
    8. save(objectlist, file="myfile"):  保存指定對象到一個文件中
    9. load("myfile"):  讀取一個工作空間到當前會話中(預設值為.RData),一些表態的數據文件也可保存為.rdaa文件,通過load載入到記憶體
    10. q():  退出R

R幫助:


  • help.start(): 打開所有已在本地安裝的幫助文檔
  • help( 函數名) 或 ? 函數名 : 查看函數幫助文檔
  • help.search(“pattern”)  ??pattern:  函數搜索已在本地電腦安裝的幫助文檔
  • 如果有些包是最近才安裝的,則設置rebuild參數來刷新資料庫,如:help.search(‘tree’,rebuild=TRUE)
  • 示例:help(“bs”,try.all.package=TRUE) : 預設情況下,help只會在載入記憶體的包中進行搜索,選項 try.all.package = FASLSE,若設為TRUE,則可在所有包中進行搜索。在 這種情況下,不會顯示函數 的幫助頁面
  • 若package未載入記憶體,而想查看幫助頁面,可使用:help(“bs”,package=“splines”);
  • apropos("yourSearchName"):找出所有名字中含有指定字元串的函數(僅載入到記憶體中的包中搜)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Objective-C語言是一門動態語言,它將很多靜態語言在編譯和鏈接時期做的事放到了運行時來處理。這種動態語言的優勢在於:我們寫代碼時更具靈活性,如我們可以把消息轉發給我們想要的對象,或者隨意交換一個方法的實現等。 這種特性意味著Objective-C不僅需要一個編譯器,還需要一個運行時系統來執行 ...
  • 本文主要介紹在Ubuntu下Android開發環境的搭建,所使用的IDE為Eclipse(Android Studio同理,且可省去配置SDK以及安裝adt插件的步驟)。 1.安裝JDK (1)JDK8下載地址:http://www.oracle.com/technetwork/java/javas ...
  • swift 申明變數 var name = "Hello" //name會被自動識別成String 類型 或者指定變數類型: var name :String = "Hello" swift中用 + 做字元串連接 ,但是不可 + int 型。如果要加int 型,可採用如下的方法: var i = 2 ...
  • 一、概述 SQL Server提供了“分離/附加”資料庫、“備份/還原”資料庫、複製資料庫等多種資料庫的備份和恢復方法。這裡介紹一種學習中常用的“分離/附加”方法,類似於大家熟悉的“文件拷貝”方法,即把資料庫文件(.MDF)和對應的日誌文件(.LDF)拷貝到其它磁碟上作備份,然後把這兩個文件再拷貝到 ...
  • 面向對象1.類:眾多對象抽象出來的2.對象:類實例化出來的 3.類的定義關鍵字 class 4.類裡面包含成員變數成員屬性 成員方法 5.面向對象三大特性(1)封裝目的:保護類,讓類更加安全。做法:讓類裡面的成員變數變為私有的,做相應的方法或者屬性去間接的操作成員變數 封裝成員方法來間接操作類裡面的 ...
  • 結合實際的工作環境,在開始R研究的時候,首先著手收集的就是能以Web方式發佈R運行結果的基礎框架,無耐的是,R一直以來常使用於個人電腦的客戶端程式上,大家習慣性的下載R安裝包,在自己的電腦上安裝 --> 寫演算法 --> 運行 --> 以貼圖或者文檔的形式發表自己的作品。花了較長時間,終於找著了一套框 ...
  • 《SQL 必知必會》讀書筆記 -- 第9課 彙總數據 9.1 聚集函數:對某些行運行的函數,計算並返回一個值 案例: -- 確定表中函數 -- 獲得表中某些行的和 -- 找出表列的最大值、最小值和平均值等 --當我們實際想要彙總信息,而不是需要數據本身時,可節省時間和帶寬。 --表9-1 --函數 ...
  • 【BBED】bbed常用命令 一.1 相關知識點掃盲 BBED(Oracle Block Browerand EDitor Tool),用來直接查看和修改數據文件數據的一個工具,是Oracle一款內部工具,可以直接修改Oracle數據文件塊的內容,在一些極端恢復場景下比較有用。該工具不受Oracle... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...