剛認識對R裡的函數認識很少,會不斷遇到的問題是:「我的資料是....,我想要做....,有什麼函數可以用?」
其實即使用了R很久,這個問題還是會一直存在的。最簡單的答案當然是靠google,輸入 R和想做的事,中文查不到試著打英文,R的英文資源遠勝於中文,總是能查到一些東西的,甚至可以查到很多人寫的R package(就是別人幫你寫好並打包一堆特殊功能的函數),下載直接用。但對於剛接觸R的人,如果你要做的不是什麼複雜的分析,建議先不要急著下載package或外部函數,而是找直接找能在R裡運作的函數,最基本的function。
查到一些可能有用的函數後,都應該看它的help一眼。 Lesson3 已經提了str()來了解物件這一篇就要說如何例用help()來使用函數。

霹靂貓 發表在 痞客邦 留言(0) 人氣()

用R寫東西,常常出現錯誤都是因為物件結構發生了不如預期的變化,常常會因為結構的問題,要做調整,想想還真麻煩!但其實越熟悉這種結構間的變化關聯和差異,也會有很方便的效果產生。
 

霹靂貓 發表在 痞客邦 留言(0) 人氣()



Lesson1裡用了一個小例子來說R使用者常遇到的困擾:

> colMeans(iris)
Error in colMeans(iris) : 'x' must be numeric


如果對物件結構不清楚,會很容易出現一直出現Error!所以常常要查物件結構。
 
另一個必須了解結構的理由,是為了對付複雜的list。雖然一般人很少從list(列表)開始處理,但是函數做分析後的輸出,得到的結果很可能是一堆東西堆疊成的list,我們總免不了要自己去list裡面抓一些東西出來用。看個例子吧:

霹靂貓 發表在 痞客邦 留言(0) 人氣()



這一篇介紹使用],從一個物件中提取數據的基本原則:


 

]中提取物件中的數據主要是以物件的維度來看怎麼提取:
一維 ex. vector 向量,一串東西排在一起
二維 ex. matrix or data.frame

三維以上 ex. array
亂七八糟的東西湊成 ex. list 列表
 

下面是各種例子,就不放output了,有興趣的直接打到R裡面看結果就知道了。
 

一維:數字或文字的向量(vector)...只要是一串東西,都用一位數字放在]取內部的資料:

> (A <- 1:10 # int, vector

> letters[-c(5:20)]   # delete

> letters[26:1]; rev(letters # reverse

> LETTERS[c(16, 5, 9, 12, 9)]  # 猜猜它是什麼

> A[length(A)-c(1:0)]; tail(A, 2) # tail

霹靂貓 發表在 痞客邦 留言(0) 人氣()


先來看看R怎麼運作的:這邊的指令都是利用R的基本內建的物件,打開R在console裡輸入應該都可以跑。
> colMeans(iris[, -5])
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333

霹靂貓 發表在 痞客邦 留言(0) 人氣()


如果要把一串數字做分類,例如要把溫度分低中高、年齡換成不同年齡層,在統計上來說就是把連續型的變數轉換成離散型的變數,常常會寫一堆if 和 else 來分類,像是用ifesle()來做:
例如要把1到20分成三組:1~5, 5~10, 10~20:

> (X <- 1:20)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
> ifelse(X<=5, 1, ifelse(X <= 10, 2, 3))
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
 
其實R裡有個方便的函數cut() 可以試試,就不用再寫一堆if else囉!
[cut 的用法:1.待切割的數據,2.下刀處(要給頭尾),3切完後的類別]
 
提供原始資料和切點
> cut(X, c(0, 5, 10, 20))   ## breaks
 [1] (0,5]   (0,5]   (0,5]   (0,5]   (0,5]   (5,10]  (5,10]  (5,10]  (5,10]  (5,10]
[11] (10,20] (10,20] (10,20] (10,20] (10,20] (10,20] (10,20] (10,20] (10,20] (10,20]
Levels: (0,5] (5,10] (10,20]
提供原始資料+切點+新標籤
> cut(X, c(0, 5, 10, 20), c("S", "M", "L"))
 [1] S S S S S M M M M M L L L L L L L L L L
Levels: S M L
把資料改成20到1,結果當然是倒過來的:
> (x <-cut(20:1, c(0, 5, 10, 20), c("S", "M", "L")))
 [1] L L L L L L L L L L M M M M M S S S S S
Levels: S M L
 
cut()傳回來的值是一種較複雜的物件Factor:不熟悉各種物件格式的朋友只要先記得,Factor其實是披上標籤外皮的數字,平時只看得到標籤(label),但用as.numeric()就可以看到他的真正數字了。Factor在建模時有些不錯的特性,須要另外寫一篇,先略過。
> as.numeric(x)
 [1] 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 1 1 1 1 1
L對應3,M對應2,S對應1,Levels: S M L 裡就暗示了標籤對應數字的順序了。
如果只要文字符號,就把他變成Character吧!
> as.character(x)
 [1] "L" "L" "L" "L" "L" "L" "L" "L" "L" "L" "M" "M" "M" "M" "M" "S" "S" "S" "S" "S"
 
比較下列兩行程式和結果看看Character和Factor的差別:
把原來Factor屬性的x依小到大排序,可以發現他是依潛在的數字在排序的(所以說他是批著文字皮的數字)。

> sort(x)

 [1] S S S S S M M M M M L L L L L L L L L L

變成Character以後做排序就是依照字母順序了。
> sort(as.character(x))
 [1] "L" "L" "L" "L" "L" "L" "L" "L" "L" "L" "M" "M" "M" "M" "M" "S" "S" "S" "S" "S"
 

其實如果不須要Factor的特性(或是不用label),cut()的好朋友findInterval()是一種更有效率的方法,他只傳回數值,而且給切點不用給頭尾。
> findInterval(1:20, c(5, 10))
 [1] 0 0 0 0 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 
分完類後,接著很多人會好奇每一類有幾個呢?這時就輪到table()上場了:
> table(x)

x

 S  M  L 

 5  5 10
 
如果目的就是想知道一串數字分類後每類有幾個,那table()很慢,因為它有更複雜的功能(做交叉分析表cross table),所以在對單一數列計數表格,比起table(cut())的作法,畫直方圖(histgram)的函數hist()才是有效率和省記憶體的強者,一般資料不大的時候沒關係,但是如果是寫在迴圈且運算量大的程式裡....嘿嘿....
用plot=FALSE把圖關掉,hist()會輸出
一堆東西,但是hist()$counts和table()的答案是一樣的。

> hist(1:20, c(0, 5, 10, 20), plot=FALSE)$counts
[1]  5  5 10
 
重點1. cut() vs findInterval()  
重點2. table(cut()) vs hist(..., plot=FALSE)
重點3. Reference: help(cut)

霹靂貓 發表在 痞客邦 留言(1) 人氣()

  • Jul 16 Sun 2017 04:02
  • 階級

這不是台灣特有的問題,但是以台灣或華人的這種思考去看,會發現世界到處都有這個問題。這幾年陸續看到一些階級不流動的文章和影片...有大陸、有歐洲、有美國、有台灣....都有社會階級僵化,另外有些議題也會扯到階級流動。
 
有一個議題是在討論不想生孩子的議題裡,有人會覺得生了孩子以後,孩子也沒辦法過更好的生活、還是要被奴役,種種社會問題導致自己不想生孩子。

霹靂貓 發表在 痞客邦 留言(0) 人氣()

IMG_6890.JPG
在踏上智利和哥倫比亞的波哥大後,我越來越覺得:這是人和狗和諧的社會。
 

霹靂貓 發表在 痞客邦 留言(0) 人氣()

有時候在外頭轉或是看著之前去過的地方的照片,總想著這地方應該寫篇遊記出來介紹給朋友們,卻遲遲做不到,每次想到最後,都覺得唯一要跟大家說的一句話就是:「OOO很不錯,有機會去看看吧!」希望有人能記著一些地名,好奇那些地方,能找機會去探索類似的地方。
最近才對自己有進一步了解:我確實是那種不會去寫遊記攻略給別人看的人,所以還是不要強迫自己做這種事了。就好像看到一部好電影很想推薦,卻不想透露過多給還沒看過的朋友,總覺得每個人看這部電影會有各自的收穫。但是如果有人想找我討論聊聊,交換心得,那應該可以聊很久很久。
所以我更喜歡分享的是對某些事得到的心得感想,而不是介紹整個旅行的過程,有時候說太多,好像在暴雷、破梗一樣。
很多好地方和好電影一樣,須要親自去看看、去走走,而且不要急著跟著攻略去踩點,”沒去XXX就不算到過OOO”的迷思要打破!不要「從旅行團的窠臼裡逃脫出來的人們,又鑽入了旅行攻略的牢籠」(參考文章:中國遊客 你被騙的樣子真蠢)。更何況、很多景色看別人的照片特別美,就像我常常覺得,我挑出來放的照片,有時候被修飾得比實景還鮮豔還美,或是表現的是另一種美,卻無法傳達實景的壯麗、空礦、人的渺小....之類的感受 (這應該不是照相技術的問題吧....XD),所以有些地方還是要親自去走走才好!
最後,說實話...我也寫不出那種引人入勝的遊記XD,真心佩服和感謝寫出各種遊記的人們。但是遊記是讓我們參考的,不是讓我們複製的。每次旅遊的當下和參考的遊記都是不一樣的,當參考不是參考而是複製的時候,有些東西就變了......人生不是打電動,我們怎麼能妄想複製別人的經驗和人生?年份時間不一樣、季節天氣不一樣、觀光客人數不一樣....有時是觀光客多了問題就來了,有時是觀光產業發達了問題就改善了...總之有一利必有一弊....就像看到「某日有半價優惠的門票」代表「某日人會特別多」,「很少人去的地方」代表「不方便、物價高、可能沒廁所」.....之類的,而遊記大多只記錄好的那一面。
去陌生的地方走走,真的常常不是遊記裡那麼純粹美好愉快,總是會有些不如意的事發生。只是明知會有那麼多不美好,我還是想去看看不一樣的世界。

霹靂貓 發表在 痞客邦 留言(0) 人氣()

IMG_9420.JPG
總覺得我對冷、乾的環境的好奇,是因為台灣是個濕熱的地方,所以很難想象乾、冷的環境。乾,當然是指沙漠。



對沙漠最粗淺的印象,就是一望無際的黃沙、駱駝、仙人掌和一點綠州,雖然理智上知道能看到的不只這些,卻也想不到有什麼。一直想去新疆蒙古的大戈壁看看,沒想到反而先踏上了南美的阿塔卡瑪沙漠(Atacama Desert)。



在台灣,有關南美的旅遊的介紹,阿塔卡瑪可能不像七大奇蹟馬丘比丘或能拍出超美照片的天空之鏡那麼讓人津津樂道,但踏上這裡之後,在我心裡它的地位和班福並駕齊驅。有些地方非常美,但看兩天就開始麻目了,而阿塔卡瑪沙漠和班福卻是讓我怎麼也看不夠的那種,再怎麼照都覺得照片裡還是少了些什麼....(總不會怪我照相技術差吧? 囧)



沙漠有什麼好玩的?台灣也有沙漠呀,一望無際的沙漠、荒涼的大沙漠有什麼好看的?



我確實覺得台灣的特色是在這麼個小島上能包含多種地形景觀,但是,如果因為這樣就覺得各種地形景觀都看過了,那真的會變成井底之蛙,因為即使有類似的條件環境形成類似的景觀,在不同的陸地上也有不同風貌,那些大陸上的風景,常常是難以想象的壯麗。就像在內陸沒見過大海的人們,很難想象波瀾壯闊的大海。



親自走過後才知道,原來這麼大的沙漠卻不是一望無際,而是有邊際的。它的邊際有山脈(安地斯山脈),甚至可以看到240公里外的世界第二高活火山在冒煙。台灣本島的寬度都還不到150公里,240公里這個距離大約是台灣海峽的寬度,我在想如果能從福建沿海看到中央山脈,可能就是這樣的背景。那是怎樣的寬廣?



如果有機會,我還想再到這個地方,去這次錯過的地方,也希望更多人能找機會看看大沙漠、更多人能不要放棄探索不一樣的世界的機會。(不過可能會比較辛苦,要有些準備、放寬心。)



PS 在南美停的幾個點比較「多元」,聽著導遊們的解說,特別覺得世界是最大教室,是包含內容最廣的書,地理歷史、物理化學、人文社會、地球科學、人性心理、宗教哲學.....世界是讓我們能學習各種知識、引發各種興趣的最佳讀物,之前在學校裡的學習都只是在幫助我們能較容易閱讀世界這本書而已。小時候學過的東西,真的不只在考試上有用處。學校學的基本知識,搭配托福的那些學科單字,在外面要聽導遊解說完全靠它們了。(不過還是有很多忘光了,囧,常常聽嘸 XD)

霹靂貓 發表在 痞客邦 留言(0) 人氣()

最近重新學習(復習?)歷史知識,再想想東西方人的性格差異是怎麼來的,覺得這是很有趣的事,先看兩邊差異後再來看台灣怎麼回事:
 

霹靂貓 發表在 痞客邦 留言(0) 人氣()

525346_0.jpg
最喜歡的相聲一直是李立群和金士傑的「這一夜,誰來說相聲」(1989)。有沒有誰也聽「那一夜」和「這一夜」長大的?

霹靂貓 發表在 痞客邦 留言(0) 人氣()

Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。