2016年6月10日 星期五

Swirl_01-RBasic-04-Factors

01-RBasic-04-Factors
-------------------------------

01.factor()是一個向量物件,用途是儲存「類別」的資料。Factor向量很像文字向量,但多出額外的分類名稱彙整資訊,levels這個屬性。實際上Factor向量本質上只是整數向量加上levels。這樣設計的原因是儲存整數比儲存文字更省空間。

02. Factor向量中的levels屬性代表向量中允許出現的類別。 可使用levels()函數來查詢或設定分類資料。

03. 在Factor向量中指派沒在levels裡面的類別,會出現NA。

04. R預設是以字母順序排序levels

05.「類別」的資料有兩種。分為「無順序」與「有順序」的。對於無順序的資料硬要去比大小,R會印出警告訊息。 想轉為有順序的factor向量。做法是在factor函數中,把ordered設為TRUE。 並且把levels順序以向量方式傳入,level要由小到大填入。
    > grades <- C("A","C","B","B","A")
    > grades_factor<-factor(grades,ordered=TRUE,levels=c("C","B","A"))
    > grades_factor
    [1] A C B B A
    Levels: C < B < A

06. 總的來說factor向量用來儲存類別的資料。level屬性限制能在向量中出現的類別種類。 Factor本質上是整數向量,只是帶有levels。 Factor可以是無順序或有順序的,可用在Factor函數中使用ordered=TRUE讓Factor變成有序。

2016年6月9日 星期四

Swirl_01-RBasic-03-Data-Structure-Object

01-RBasic-03-Data-Structure-Object
-----------------------------------------------


01. 向量物件有兩個很重要的屬性:`mode`和`length`。
    - `mode`代表這個向量的值型態,總共有:    `logical`、`integer`、`numeric`、`complex`、`character`和`raw`。
    - `length`代表這個向量的值的個數。

02. `[ ]`和`[[ ]]`的差異。單層方括弧`[ ]`,R 取出向量的元素並且維持原有屬性,除了傳回元素值外也傳回names與其他屬性。使用雙層方括弧`[[ ]]`時,R 會只傳回元素值。

03. list向量最有用的地方,在於它可以裝不同型態的值。包含不同屬性、不同長度的數值、文字、向量甚至是矩陣。

04. 所有的R 物件,都有「屬性」(attributes)。我們可以用`attributes`這個函數來印出一個R 物件的屬性與屬性內容。
    >  attributes(g)
    $names
     [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"      
     [7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"       

    $class
    [1] "lm"

05. `names(g)`來查詢`g`的名字
    > names(g)
     [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"      
     [7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"       
    也可以用`attr(g, "names")`來取得名字是"names"的屬性
    > attr(g, "names")
     [1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values" "assign"      
     [7] "qr"            "df.residual"   "xlevels"       "call"          "terms"         "model"       

06. `class(g)`來查詢`g`的類別
    > class(g)
    [1] "lm"

   
07. 了解像attributes這樣的功能,在探索一些複雜的R模型物件時,是非常好用的。我們在之後深入探討`matrix`、`data.frame`等進階物件的時候, 也會需要了解attributes的相關的知識。而名稱為"class"的屬性是非常重要的,因為它牽涉到R的物件導向設計。


Swirl_01-RBasic-02-Data-Structure-Vectors

 01-RBasic-02-Data-Structure-Vectors
---------------------------------------------
01. `max(x)`會傳回x 中最大的值,而`min(x)`會傳回x 最小的值

02. 函數`range`就能直接傳回輸入向量的 範圍(最小到最大)

03. `sum(x)`會傳回x 所有值的加總。 `length(x)`函數能直接傳回x 的長度

04. `mean(x)`就能直接 計算x的平均值

05. `var(x)`樣本變異數: `sum((x - mean(x))^2) / (length(x)-1)`

06. `sd(x)`計算x 的樣本標準差

07. `sort(x)`則會產生一個和x 長度一樣的向量,但是值是 由小到大排列

08. `sqrt(x)`代表的就是數學上開根號的運算

09. 產生一些附帶有規則的序列。例如: `1:10`就會產生自1至10的序列。`seq(1, 10)`其實就是`1:10`

10. `:`這個運算子的優先層級很高,也就是說如果R 看到:`2 * 1:10`這段expression,會優先處理`1:10`,然後再把所有結果乘以2

11. 想要重複一個數字,則可以用`rep(x)`

12. 在R 中,邏輯值「真」常用`TRUE`或`T`來代表。「假」則用`FALSE`或`F`代表。第三種在邏輯向量會出現的值,就是NA(Not Available)

13. 邏輯向量的「條件」有:大於`>`、大於等於`>=`、 小於`<`、小於等於`<=`、相等`==`和不相等`!=`。

14. 邏輯運算子「且」`&`和「或」`|`

15. 當資料的值無法取得的時候,R 就會給它一個特殊的記號:NA

16. `is.na(x)`來判斷一個向量裡面有沒有NA

17. NA和NaN。 NA代表的是缺失值,而NaN往往來自於數學運算中沒有定義的行為。 例如:`sqrt(-17)`、`0/0`和`Inf - Inf`。在R 裡面,無限大就是`Inf`

18. 雖然我們理解NA和NaN的不同,但是`is.na`會把兩者都看成TRUE

19. 「字串」是透過單引號`'`或雙引號`"`來建立的

20. 在R 中,`\`符號代表字串中的跳脫符號。舉例來說,如果我們要輸入一個包含雙引號的字串,有兩種方法:一種是用單引號`'`來包覆雙引號,另外一種就是在雙引號之前插入`\`

21. `paste(x)`是在R中常常用來做字串處理的函數。我們可以丟任意個 arguments 給`paste`,結果R會把這些argument以字串的形式接成一個字串。
    > paste(c("X", "Y"), 1:10)
    [1] "X 1"  "Y 2"  "X 3"  "Y 4"  "X 5"  "Y 6"  "X 7"  "Y 8"  "X 9"  "Y 10"

22. `paste0`預設在串接字串的時候,中間是不會有空格
    > paste0(c("X", "Y"), 1:10)
    [1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"

23. 挑選向量中一部份的資料。x<- c(10.4,5.6, 3.1, 6.4)
    第一種方法,使用坐標。如果要挑選x 的 第一和第三個位置的值,只要使用:`x[c(1,3)]`
    第二種方法,是利用邏輯向量。如果要 挑選x 之中超過5 的值,就透過`x[x > 5]`
    第三種方法,是削去法。如果要挑x _除了_第二個之外的 全部的值,可以使用`x[-2]`

24. R的向量中,每一個值是可以有名字的。舉例來說,我們可以透過: `names(x) <- c("a", "b", "c", "d")`來幫x的每個值取名
    > x
    a    b    c    d
    10.4  5.6  3.1  6.4











Swirl_01-RBasic-01-Introduction

01-RBasic-01-Introduction
---------------------------------------
01. 查詢函數的詳細說明,例如solve這個函數就輸入:`help(solve)`或`?solve`

02. 多個expression可以用`{`和`}`包覆起來,變成一個大的expression。如果有一個expression還沒有完成,(可能是少了`)`或`}`),那R 會在console的開頭用`+`來提示你。

03. 在程式碼中插入註解:`#`。所有在# 之後的輸入,R 都會略過

04. `objects()`或`ls()`來列出所有目前存在的object 的名字

05. 刪除已經存在的物件。舉例來說,如果我們要刪除`a`, 就只要輸入:`rm(a)`

06. 每次退出R的時候,你都有機會把所有的物件存到一個叫做 .RData的檔案之中。之後,只要在相同的目錄打開R,這些資料就會自動進入R。所以R 官方建議使用者在不同的分析專案時,在不同的目錄底下跑R。因為我們常常在分析的時候,建立一些名叫`x`或`y`的變數。 在相同的案子中,`x`和`y`可能是很明顯的。但是當我們同時做很多分析時,就容易搞不清楚`x`是哪一個分析案子的`x`。





Swirl_00-Hello-DataScienceAndR

發現了R 語言翻轉教室這個好站....

http://datascienceandr.org/

可以用互動式的方式在R實作....
比啃書本快多了....



學習環境:
  1. 安裝R
  2. 安裝Rstudio
  3. 打開R ,執行:source("http://wush978.github.io/R/init-swirl.R")
  4. 輸入library(swirl);swirl()後即進入教學環境。
 

00-Hello-DataScienceAndR
-------------------------------------
`skip()`    來看答案並跳過卡住的關卡
`play()`    來暫時中止swirl自由摸索
`nxt()`        回到課程
`bye()`        離開swirl環境
`swirl()`    可以選擇接關,繼續挑戰 離開前的進度。