2020-09-27|閱讀時間 ‧ 約 6 分鐘

R03: 常用的基本功能R basic functions

    今天想跟大家介紹幾個R常用的功能,我並不打算像R的教學書籍一步一步的系統性教學,因為要求系統性教學,我會花太多時間在準備教程,讓這個R的教學太正式,失去了blog的感覺,反而帶給大家太多壓力,所以你可能覺得我的文章很跳躍,的確是這樣沒錯,但是寫程式重點在於,善用網上資源,跟程式撰寫的邏輯養成,而我的任務不會著重在這兩個部分,而是讓你看到R可以做什麼事情,去引發你自我學習R的企圖心,當然在這系列文章中,還是有一些教學的脈絡,但是那不是我寫文章的初衷,而我的初衷是要引發你的興趣。
    第一個我想講的是怎麼產生隨機數,這個為什麼很重要呢?當你要在ptt/stackoverflow 上問問題時,大家通常都會要你提供樣本數據,以供測試,又或者在你寫程式的時候,你需要測試scripts,如果手邊沒有實際數據可以測試,我通常會使用亂數產生的數據,亂數產生的functions包含runif()、sample()、rnorm()等等。
    這邊先來看看runif 跟sample的使用辦法,我下面的寫法為從1到100隨機取十個數,
    > runif(10,1,100)
    [1] 34.84857 64.58274 16.50319 22.58514 37.36246 34.97631 19.54502 65.30065 17.61412 72.37462
    #只取整數的寫法
    > floor(runif(10,1,101))
    [1]  94  55  27  76  15   4  36 100  13  10
    > sample(1:100,10)
    [1] 28 13  1 78 68 18 10 43 67 38
    #如果想要你的隨機可以被重複的話使用 set.seed(x) x 為隨意整數
    > set.seed(5)
    > runif(10,1,100)
    [1] 20.82123 68.83664 91.77070 29.15555 11.36036 70.40469 53.26804 80.98558 95.69351 11.93485
    > set.seed(5)
    > floor(runif(10,1,101))
    [1] 21 69 92 29 11 71 53 81 96 12
    第二種方法是隨機取數但數列平均為X標準差為Y
    > rnorm(10)
    [1]  0.0894771  1.6267513 -1.3325510  0.7343093  1.8798380  0.2859744 -0.5899226 -0.2248598 -2.1197585  0.5481381
    #默認X = 0, y = 1
    > rnorm(10, 1, 0.5)
    [1]  0.4587659  1.3565658  0.8681169  0.9135287 -0.1811799  1.5290381  1.0060021  0.7302146  0.6065974  1.1954373
    通常這兩個functions你可以也寫出大部分的隨機數列了,最後一個我沒提到的就是rbinom相關的幾個functions讓你自己去體驗了。
    > library(ggplot2)
    > us_states <- map_data("state")
    > dim(us_states) #look data dimension
    [1] 15537     6
    > colnames(us_states) #look colnames
    [1] "long"      "lat"       "group"     "order"     "region"    "subregion"
    > nrow(us_states) #look number of observations
    [1] 15537
    > ncol(us_states) #look number of vairables
    [1] 6
    > summary(us_states$lat) #look summary of latitude
      Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
     25.13   33.91   38.18   38.18   42.80   49.38
    第二個我覺得比較重要的是你要怎麼summary的你數據,下面我是用美國polygon的數據來作例子,做nrow的部分是有時候loop over我們的數據,我們之後會講迴圈啦,這邊只是簡單提一下,你就可以很簡單loop over數據了。
    for(i in 1:nrow(df)){
     AAAA
     BBBB
    }
    再來是summary的部分包含有最小值,25%,50%,平均值,75%,最大值的數據,如果有missing 或是 NA他也會顯出來有幾個NA的數據,非常好用的功能。
    本來是還想講其他功能,不過最近真的好累,每個星期工作量雖然沒有太大增加,但是客戶很機巴,壓力變很大,加上都沒什麼社交活動每天只能面對老婆跟小屁孩,腦袋還是不要讓它過熱好了!
    感覺上歐美第二波疫情好像開始了,如果你在台灣那恭喜你,台灣目前應該是全世界最安全的國家,如果你不在台灣,還是要注意社交距離,減少暴露在人群擁擠的狀況下,但不論你在哪邊戴口罩一定是必須的,以公衛的角度來看,戴口罩是目前最好的手段能減少中共病毒擴散卻又能保持社會一定運作。

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.