close
先來看看R怎麼運作的:這邊的指令都是利用R的基本內建的物件,打開R在console裡輸入應該都可以跑。
> colMeans(iris[, -5])
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.843333 3.057333 3.758000 1.199333
這行程式的中文翻譯是:把iris裡第五個變數踢掉,再對剩下的變數分別取平均。就像英文裡完整的句子要有主詞(名詞)和動詞一樣,用R就是不斷的請某個東西做某種變換。
這裡iris是鳶尾花的資料,colMeans是對每一行(欄)取平均的函數。
[補充統計小知識:在資料的排列上,一般習慣每一列(row)是一個受測者,每一欄(column)是一個變數(描述受測者身上我們想研究的某幾種特徵)。在R裡輸入iris叫資料出來看,會發現每一列是一朵花,每一欄記錄花萼長寬花瓣長寬和種類,不管在哪個軟體裡,資料通常以這種方式記錄的。可以回想一下你在生活中接觸到的Excel表或其他資料是不是大部份都這樣?或輸入trees、CO2、cars看看是不是也是這樣。]
在R裡面輸入物件名稱就會印出它們的樣子,不過這種作法通常沒什麼太大幫助,對於R現有的物件,最好是用?來幫忙。其他更多的內件數據清單,請輸入data()。
> data()
(會有出現一堆資料名稱和簡述,手邊沒有資料的又想練習R的可以從裡面找資料來試試。)
> data()
(會有出現一堆資料名稱和簡述,手邊沒有資料的又想練習R的可以從裡面找資料來試試。)
> iris
(省略輸出結果)
> ?iris
(會跳出iris的介紹)
?雖然長得不太像函數,但它其實是help的簡化版,使用?有問題的時候再叫help來幫忙。
> help("?")
想要用R的話,一定要好好利用help()。最後一課Lesson4裡講如何有效從help裡自學R和統計。
R內存的物件很多,但可以把這些物件略分為兩大類:抽象的vs.具體的。
( )前的物件是個函數(function),負責抽象的的動作,會對( )裡的東西做轉換。在這裡是colMeans函數要對iris[, -5]裡每一欄變數取平均。
( )前的物件是個函數(function),負責抽象的的動作,會對( )裡的東西做轉換。在這裡是colMeans函數要對iris[, -5]裡每一欄變數取平均。
iris[, -5]是把第五個變數踢掉的意思。[ ]前的物件一定是某種具體的東西,[ ]是用來取資料裡特定位置的數據,所以[ ]裡寫的是座標、位置的訊息。至於具體怎麼定位,就要依照物件的結構和維度了,這是Lesson 2會先介紹。
請注意:雖然R裡所有東西都是物件(Object),但為了說明的方便,我會稱抽象的為「函數」,具體的叫「物件」。
再來有個小問題:為什麼我要把第五欄變數踢掉?請試著輸入
> colMeans(iris)
Error in colMeans(iris) : 'x' must be numeric
這是錯誤的指令,而且它必須是錯誤的!因為第五欄是花的種類,不是數字。
平均只能對像長度寬度這種數字取,對花的種類算平均是沒有意義的。
用R的第一個困擾就是:如果對物件結構不清楚,會很容易出現一直Error!所以Lesson 3 會講結構。
[補充統計小知識:故意挑這筆資料,除了因為它在機器學習和統計都是很有名的範例外,也是因為它有兩種完全不同類型的變數。在統計裡,變數有略分為兩大類。
如果還記得小時候學過長條圖和直方圖的話,能畫長條圖(bar plot)的資料是一類,能畫直方圖(histogram)的是另一類。
在這裡,只有花的種類能畫長條圖,其他都是畫直方圖。他們從圖型表達上開始就是用不同類的方法,其他分析方法的選用也會不一樣。統計的用語裡,前者是離散型(discrete)變數,後者是連續型(continuous)變數。另外,如果你看過統計第一章就會知道,變數不只分兩類,還可以再細分的。]
用R分析資料大約就是反覆堆疊( )和[ ],也就是說,把數據用函數做轉換、再取出結果再轉換、再取出結果再轉換.....然後就一直做到你滿意為止。
堆疊過程中常常有東西是要先存下來等一下才用,這時就叫要assign家族幫忙了。
> x <- mean(iris[[2]]); mean(iris[[2]]) -> x; x = mean(iris[[2]])
> x
[1] 3.057333
第一行放了三個各別的指令,做的是相同的事情:把計算出iris[[2]]的平圴存成物件x。兩個單獨指令放一行,中間要用;隔開。不管是 <- -> = 都是assign家方便好使喚的小弟們,通常不會出問題,之後如果在存物件上遇到任何問題,請直接找家族老大assign()出面解決。
做了assign的動作後,mean的計算結果就不會印出來了,所以要看結果要在打一次新物件的名字把它印出來,或是用print()要求它印出結果。最後這行指令是前面的兩行指令一步到位,儲存同時印結果。最外層的()就是print()的偷懶法。
做了assign的動作後,mean的計算結果就不會印出來了,所以要看結果要在打一次新物件的名字把它印出來,或是用print()要求它印出結果。最後這行指令是前面的兩行指令一步到位,儲存同時印結果。最外層的()就是print()的偷懶法。
> (x <- mean(iris[[2]]))
[1] 3.057333
最外層的()這種偷懶寫法只有這種時候可以用,在迴圈或函數裡都不會有作用。
如果有機會自己寫迴圈或函數,裡面的東西都不會印出來,所以要查錯時,或要看中間的計算結果,都要靠print()一族。
如果有機會自己寫迴圈或函數,裡面的東西都不會印出來,所以要查錯時,或要看中間的計算結果,都要靠print()一族。
最後,簡短的介紹怎麼安裝R:
先一個很簡單的安裝方法:直接上網下載點擊安裝 https://cran.r-project.org/mirrors.html 裡有是不同的國家的載點,挑一個順眼的(較快的)進去,選自己的作業系統下載,鼓勵裝英文。如果安裝失敗,請找google。
小結:
認識( )和[ ]後,也可以自己存一些小物件再叫出來看print()。
下兩篇講如何定位截取物件裡的部份內容,會扯到一點物件結構和屬性的差異。
下兩篇講如何定位截取物件裡的部份內容,會扯到一點物件結構和屬性的差異。
R Lesson 2 用[]提取物件內的資料的方法。
文章標籤
全站熱搜