Posts filed under 'R語言'
6_R的函數
#本來說上週就把這章寫上的,沒想到工作突然忙起來了…… 呵呵,總算到昨天爲止剛剛算是小小的告一段落,今天就抽時間寫它一章~~
今天就來聊一聊R的函數
R中有很多的標準自帶的函數,也有很多的由擴展包支持的函數。今天我們主要看一看R中標準自帶的函數。
首先簡單定義一下什麼是函數:
在R中,所謂函數實際上就是一系列程序的組合。
爲了能夠更深刻的理解這句話,我將在下面這個例子中先一步一步的計算幾個數的平均值;再講如何把這些可以重複利用的運算步驟改寫成爲自己服務的函數;最後,我們再看一下R中已經爲我們準備好了的求平均值的函數的用法:
1,一段程序
我們用R計算下面這5個數的和
23 34 56 78 89
在R中,我們剛開始可能會這樣寫:
>x <- c( 23, 34, 56, 78, 89 )
>z <- 0
>for( i in 1:5 ){
>z <- z + x[i]
>}
>z <- z/5
>z
[1]56
經過我們一步一步的計算,得到了最後的結果56。
但如果每次遇到類似這樣的求平均的運算,我們都這樣的用手去一步一步的輸入的話,好像很麻煩,呵呵,還好,R可以幫助我們這些懶人,用函數的方式來解決這個問題。
2,一段程序變函數
我們所想要的是,只要輸入數據就可以自動的幫我們算出平均值的結果。下面我們來看看怎樣在R中寫一個自己的函數。
> mymean <- function(x){
+ y <- 0
+ for(i in 1:length(x)){
+ y <- y+ x[i]
+ }
+ y <- y/length(x)
+ }
現在,屬於我們自己的求平均函數mymean()就完成了,我們可以用下面這段程序來檢查一下看有沒有什麼錯誤。
>x <- c( 23, 34, 56, 78, 89 )
>y <- mymean(x)
>y
[1]56
呵呵,結果一致。 我們以後就可以用這個自己製作的函數來計算其他的各種求平均運算了。
3,利用R自帶的函數
其實像求平均、求和、最大值、最小值甚至自然指數、平方根等運算在R中都已經有自帶的函數。比如R中自帶的求平均函數:mean()
>x <- c( 23, 34, 56, 78, 89 )
>y <- mean(x)
>y
[1]56
使用方法和我們自己寫的函數的使用方法是一樣的。
好,我們到現在爲止就大概的看了看函數的定義,如何製作自己的函數以及如何使用R中自帶的函數。
接下來,我就把R中自帶的函數列一個簡表,以方便大家查詢。(這裏並不是全部,只是個人認爲比較常用的,希望對初學者有所幫助。……也許以後會慢慢更新、補全,呵呵……)
基本統計量:
mean
求平均值
max
求最大值
min
求最小值
range
求範圍(最大值-最小值)
median
求中央值
var
求分散
數據操作:
matrix
建立行列式
list
建立列表
is.*****
****是數據的類型名
例如:
is.matrix(x)語句的意思是問R:“x是不是行列式?”。
如果x是行列式的話R將返回”TRUE”,如果不是R將返回”FALSE”
as.****
****是數據的類型名
as.matrix(x)的作用是不管x以前是什麼類型的,R都要用這條語句來把x轉換成行列式。
nrow
返回對象的行數:nrow(x)
ncol
返回對象的列數:ncol(x)
length
返回對象的長度
colnames
返回列名
rownames
返回行名
簡單計算:
abs
計算絕對值
abs(-2)
exp
求自然指數
exp(1)=2.7182…
sqrt
求平方根
sort(4)
log
求自然對數
log(exp(1))=1
log10
常用對數
log10(10)=1
cos,sin,tan
三角函數
acos,asin,atan
逆三角函數
round
四捨五入
round(3.1415 , 3)= 3.142
Add comment June 22nd, 2006
5_用R進行基本的統計計算
※過了一個黃金週,呵呵,都不知道該怎麼上班了~~
今天簡單的講一下如何用R進行基本的統計計算。
定義:
數據有很多種分類方法,在這裏,爲了方便理解,暫時把年齡、身高、體重等用數字表示的數據叫做數量型數據;相對的,把血型、性別、職稱等用文字敘述的數據叫做質量型數據。
在這裏所說的基本的統計計算,是指對各類數量型數據進行求和、平均、求最大值最小值等等的計算。
●和與百分比
A:和
在對數量型數據進行分析計算時,求和是經常會使用到的。
比如說,有五位同學,他們的身高分別是:
1.75米 、 1.82米 、 1.78米 、 1.93米 、 1.77米
求他們的身高的總和。
和 = 1.75+1.82+1.78+1.93+1.77 = 9.05米
用R進行求和計算時,你可以按照下面的方式進行計算
> 1.75+1.82+1.78+1.93+1.77
[1] 9.05
也可以利用R本身的sum()函數,這樣的話,會更加便捷。
> shengao <- c(1.75,1.82,1.78,1.93,1.77)
> sum(shengao)
[1] 9.05
B:百分比
還是剛纔那5位同學,他們的體重分別是:
69公斤 , 80公斤 , 78公斤 , 96公斤 , 65公斤
他們的總體重爲:
> tizhong <- c(69,80,78,96,65)
> sum(tizhong)
[1] 388
388公斤。
那麼,第一位同學佔總體重的多少呢?
按比例計算:
> tizhong/sum(tizhong)
[1] 0.1778351 0.2061856 0.2010309 0.2474227 0.1675258
按百分比計算:
> 100*(tizhong/sum(tizhong))
[1] 17.78351 20.61856 20.10309 24.74227 16.75258
使用擴展包sca中的percent函數,可以用帶%符號的表示方式顯示結果。
> library(sca)
> percent(tizhong/sum(tizhong))
[1] “18 %” “21 %” “20 %” “25 %” “17 %”
還可以用參數d來指定小數點後的表示位數。在不指定的情況下,小數點後的數字不表示。
> percent(tizhong/sum(tizhong),d=1)
[1] “17.8 %” “20.6 %” “20.1 %” “24.7 %” “16.8 %”
如果不想結果被雙引號包圍,可以用noquote命令
> noquote(percent(tizhong/sum(tizhong),d=1))
[1] 17.8 % 20.6 % 20.1 % 24.7 % 16.8 %
●表示中心的統計量
表示數據中心位置的統計量有很多種,最基本的有:平均值、最頻值。
A:平均值
上面那五位同學的年齡分別爲:
19歲 、 21歲 、 20歲 、 26歲 、 17歲
在求這五位同學的年齡的平均值時,可以用下面這種方法:
> (19+21+20+26+17)/5
[1] 20.6
也可以用R自帶的mean()函數:
> nianling <- c(19,21,20,26,17)
> mean(nianling)
[1] 20.6
B:最頻值
在數據中最頻繁出現的數值叫做最頻值。
我們先用其他的函數來間接的求最頻值。
例如:我們在求下面這組數據的最頻值時,可以使用table函數。
1 , 7 , 3 , 7 , 8 , 23 , 5 , 7 , 9 , 3 , 4
> table(c(1 , 7 , 3 , 7 , 8 , 23 , 5 , 7 , 9 , 3 , 4))
1 3 4 5 7 8 9 23
1 2 1 1 3 1 1 1
從返回的結果中我們可以清楚地看到,在數據中 “7” 出現了3次,因此 “7” 爲該組數據的最頻值。
接着,我們直接用函數median()來求最頻值。
> median(c(1 , 7 , 3 , 7 , 8 , 23 , 5 , 7 , 9 , 3 , 4))
[1] 7
●表示分散的統計量
表示數據中心的統計量雖然很重要,但是表示數據四周的分散信息的統計量也十分的重要。
A:最大值、最小值和範圍
我們用tizhong數據,分別計算五位同學體重的最大值、最小值和體重的分佈範圍。
最大值
> max(tizhong)
[1] 96
最小值
> min(tizhong)
[1] 65
範圍
> range(tizhong)
[1] 65 96
B:方差和標準偏差(variance AND standard deviation)
在R中,有很方便的求方差和標準偏差的函數var()和sd()。
例如在求tizhong數據的方差和標準偏差時,可以如下計算。
方差:
> var(tizhong)
[1] 144.3
標準偏差:
> sd(tizhong)
[1] 12.01249
C:四分位數
四分位數是指把樣本數據按從小到大的順序等分成四份,各等分點上的數即爲四分位數。
例如:數據
3(0%點) 5 6(25%點) 8 9(50%點) 11 12(75%點) 15 16(100%點)
25%點的6和75點的12分別稱爲下四分位數和上四分位數。
上四分位數與下四分數之差叫做四分位間距。
在R中我們可以用quantile()函數和IQR()函數來求四分位數和四分位間距。
> sifenshu <- c(3,5,6,8,9,11,12,15,16)
> quantile(sifenshu)
0% 25% 50% 75% 100%
3 6 9 12 16
> IQR(sifenshu)
[1] 6
今天簡單介紹了一下如何用R對一些基本的統計量進行計算,如果有其它的要求的,歡迎提出來,我會進一步介紹的。今天就先到這裏了,呵呵。
7 comments May 8th, 2006
4_關於R的一些基本知識
首先看一下這一次要講的內容。
在用R進行數據分析和計算的時候,將會用到很多變量、函數、數組等等。而對象則是對所有這些變量、函數、數組等的總稱。比如說,下面這個式子:x <- 2通常我們會說,x是一個變量,我們通過賦值運算把它的值設爲2。但是在R裏,不論我們是給一個變量賦值也好,還是對一個數組進行初始化也好,我們統統把它稱爲[對象]。
- 什麼是對象(Object)
- 如何改變工作目錄
- 關於擴展包(庫函數)
- R的數據類型
- 環境設置函數options()
接下來,我們一個一個的簡單介紹。
1,什麼是對象(Object)
在用R進行數據分析和計算的時候,將會用到很多變量、函數、數組等等。而對象則是對所有這些變量、函數、數組等的總稱。
比如說,下面這個式子:
x <- 2
下面的對象是R的預設對象。我們在命名自己的對象時,是不能與下面這些對象重名的。
break
else
for
function
if
TRUE
in
next
repeat
return
while
FALSE
另外:
使用objects()函數,還可以查看目前存在的對象名。
使用rm()函數,可以消除自己所定義過的對象。( 例如: rm(killme) )
使用rm(list=ls(all=TRUE))命令,可以消除自己所定義過的所有的對象。
命名對象時,要注意大小寫。(例如:x和X是兩個不同的對象)
2、如何改變工作目錄
你可以用getwd()命令來查看當前目錄,也可以用類似setwd(”c:/usr”)的命令來更改當前的目錄。
你還可以用dir()命令來查看當前目錄裏的文件。(好像回到了dos時代…呵呵)
3、關於擴展包(庫函數)
R有很好的擴展性能,默認下R自帶了以下的擴展包。
base:R的基本擴展包
boot:R的啓動函數庫
class:Classification的函數庫
cluster:進行聚類分析計算的函數庫
foreign:讀取其它的統計軟件(如:SAS…)等生成的文件的函數庫
grid:grid圖像函數庫
KernSmooth:進行核函數密度估計運算的函數庫
lattice:lattice圖像函數庫
MASS:在『Modern Applied Statistics with S』中出現的數據與函數庫
methods:定義了在R中用於對象的各種方法、類、程序以及工具。
mgcv:GCV和一般加法模型GAM(generalized additive model)的函數庫
nlme:線性混合效果模型和非線性混合效果模型的函數庫
nnet:
rpart:使用了再歸算法的分類和迴歸樹的函數庫
spatial:
splines:splines迴歸的函數庫
stats:R的統計函數庫
stats4:S4類的統計函數庫
survival:
tcltk:Tcl/Tk的接口函數庫
tools:用於擴展包開發和管理的函數庫
utils:
另外:
使用library(help=”擴展包名”)命令可以查看該擴展包的詳細信息
使用library(擴展包名)命令可以使用該擴展包
使用search()命令可以查看現在已經讀取的擴展包
使用detach(”package:擴展包名”)命令可以卸載某個擴展包
使用data()命令可以查看當前可使用的數據對象
使用data(package = “擴展包名”)命令可以查看在該擴展包中的數據對象
擴展包的安裝:
使用下面的命令,可以聯網安裝擴展包。
options(CRAN=”http://cran.r-project.org”)
install.packages(”擴展包名”)
如果你已經下載了擴展包的ZIP壓縮文件,你可以用下面的命令指定路徑安裝擴展包。
install.packages(”路徑名/文件名.zip”, contriburl = NULL)
例如:install.packages(”c:/adapt_1.0-4.zip”, contriburl = NULL)
當然,你也可以通過菜單操作下載和安裝擴展包,請自己研究。
3、R的數據類型
R中包含以下的基本數據類型。
空值(NULL)
意義 :該對象裏什麼都沒有(甚至連0也沒有)
欠損值、不定值(NA),非數(NaN),無限大(Inf)
意義 :NA:表示數據缺損;NaN:表示用數字無法表示;Inf:無限大
複數(complex)
意義 :複數
字符串(character)
意義 :不是單一的字符,而是用雙/單引號括起來的字符
邏輯值(logical)
意義 :T表示真,F表示假
4,環境設置函數options()
用options()命令可以設置一些環境變量。
比如說:
options(digits=10)
這個命令,可以把R的整數表示能力設爲10位。
options(warn=-1)
這個命令,可以忽視任何警告。(warn=1時,爲不放過任何警告)
……
使用help(options)可以查看詳細的參數信息。
呵呵,今天就先到這裏~~
2006/6/19更新: 添加擴展包的說明
RWEKA:
WEKA是一個JAVA寫的數據挖掘的工具,RWEKA則是在R中調用WEKA的一個界面。
擴展包說明&下載地址(英文):http://cran.r-project.org/src/contrib/Descriptions/RWeka.html
9 comments April 20th, 2006
3_簡單的數學計算、數學函數以及如何編輯R程序
1,用R進行簡單的計算:
我們可以用R進行以下各類運算。
- 加法 +
- 減法 -
- 乘法 *
- 除法 /
- 冪運算 ^
- 整數商 %/%
- 餘數 %%
例如:
輸入: (1 + 2 - 3 * 4) / 5^6
結果: [1] -0.000576
2,R中還有很多的數學函數可以使用,比如說開方函數、對數函數等等。
例如:
輸入: sqrt(2)
結果:[1] 1.414213
你還可以使用多個函數進行計算。例如:
輸入: sqrt(100) + round(100) / log10(100)
結果:[1] 60 下面介紹的是R中可以使用的數學函數。
- sqrt : 開平方函數
- abs : 絕對值函數
- exp : 2.71828…
- expm1 : 當x的絕對值比1小很多的時候,它將能更加正確的計算exp(x)-1
- log : 對數函數
- log10 : 對數(底爲10)函數
- log2 : 對數(底爲2)函數
- sin : 正弦函數
- cos : 餘弦函數
- tan : 正切函數
- asin : 反正弦函數
- acos : 反餘弦函數
- atan : 反正切函數
- sinh : 超越正弦函數
- cosh : 超越餘弦函數
- tanh : 超越正切函數
- asinh : 反超越正弦函數
- acosh : 反超越餘弦函數
- atanh : 反超越正切函數
- logb : 和log函數一樣
- log1px : 當x的絕對值比1小很多的時候,它將能更加正確的計算log(1+x)
- gamma : Γ函數(伽瑪函數)
- lgamma : 等同於log(gamma(x))
- ceiling : 返回大於或等於所給數字表達式的最小整數
- floor : 返回小於或等於所 給數字表達式的最大整數
- trunc : 截取整數部分
- round : 四捨五入
- signif(x,a) : 數據截取函數 x:有效位 a:到a位爲止
3,R程序的輸入/編輯
你可以直接在R的環境裏輸入R命令執行計算,也可以用任何一款文本編輯器進行編程。R程序的默認文件名後綴是[ .R ]。
Add comment April 11th, 2006
2_R的下載、安轉及相關鏈接
R有很多的版本,支持目前主流的操作系統MAC、Linux和WINDOWS系列。因爲我個人是在WINDOWS下用R的,所以在這裏將只介紹WINDOWS下R的下載&安裝。
下載R:
你可以從世界各地很多網站上下載到R,官方的中國下載點是:
http://www.lmbe.seu.edu.cn/CRAN/bin/windows/base/
在我寫這篇文章的時候,最新的版本是R-2.2.1版。
在網絡上有一篇被翻譯過來的R入門教材,可以在這裏找到 :R 導論(入門)
安裝R:
1,雙擊R-2.2.1-win32.exe文件,進入安裝畫面。
2,在Welcome to the R for Windows Setup Wizard的畫面中,單擊NEXT。
3,在License Agreement的畫面中,選擇[I accept the agreement],然後單擊NEXT。
4,在Select Destination Location的畫面中,可以自行設定安裝目錄,默認爲:[C:/Program Files/R/R-2.2.1],單擊NEXT。
5,在接下來的過程中一律選則NEXT安裝即可。
關於R的一些網站:
中文:.
中國統計論壇 - R語言與SPLUS: http://www.8sta.com/bbs/Archive_index.asp?BoardID=38&BoardType=R語言與SPLUS
英文:
R Project(R的官方網站):http://www.r-project.org/
日文:
日本的R大本營:http://www.okada.jp.org/RWiki/
R-TIPS(日文教程):http://cse.naro.affrc.go.jp/takezawa/r-tips/r2.html
用R進行統計處理:http://aoki2.si.gunma-u.ac.jp/R/