r語言學習筆記1
——物件的建立
楊旭東(2012-3-3)
從昨天開始學習r語言,主要參考資料是網上下的《r軟體中文版教材》。
第一次接觸r是在**公司實習的時候,當時帶我的師傅給我看了他用r寫的simrank演算法,區區幾行**就把乙個複雜的演算法完整的實現了出來,當時就感到r的強大,但是迫於實習任務之重,也就沒有時間深入學習。前幾天看到王老師也在用r,重新激發了我學習r的興趣,看來r也不是那麼非主流嘛!
閒話少說,今天的主要內容是學習如何在r中使用物件。
r通過一些物件來執行,當然首先這些物件是用它們的名稱和內容來刻畫的,其次也通過物件的資料型別即屬性來刻畫。所有的物件都有兩個內在屬性:型別和長度。型別是物件元素的基本種類,共有四種:數值型,字元型,複數型和邏輯型(false或true),雖然也存在其它的型別,但是並不能用來表示資料,例如函式或表示式;長度是物件中元素的數目。物件的型別和長度可以分別通過函式mode和length得到。
向量(vector)函式vector有兩個引數:型別(mode)和長度(length),建立的向量中元素值取決於引數所指定的資料型別:數值型向量則元素值都為0,邏輯型都為false,字元型都為""。以下三個函式有幾乎相同的效果(建立乙個向量)並且只有乙個引數即長度:numeric(),logical(),和character()。
例:> v <- vector("numeric", 4)
> v
[1] 0 0 0 0
> z <- numeric(4)
> z
[1] 0 0 0 0
> z[1] <- 3
> z
[1] 3 0 0 0
> l <- logical(3)
> l
[1] false false false
> l[2] <- true
> l
[1] false true false
> l[3]
[1] false
> l[2]
[1] true
> str <- character(3)
> str
[1] "" "" ""
> str[1] = "123"
> str
[1] "123" "" ""
> z
[1] 3 0 0 0
> z <- 2:5
> z
[1] 2 3 4 5
> z <- 2:6
> z
[1] 2 3 4 5 6
> z <- 2:4
> z
[1] 2 3 4
因子(factor)乙個因子不僅包括分類變數本身還包括變數不同的可能水平(即使它們在資料中不出現)。因子函式factor用下面的選項建立乙個因子:
factor(x, levels = sort(unique(x), na.last= true), labels = levels, exclude = na, ordered = is.ordered(x))
levels用來指定因子可能的水平(預設值是向量x中互異的值);labels用來指定水平的名字;exclude表示從向量x中剔除的水平值;ordered是乙個邏輯型選項用來指定因子的水平是否有次序。回想數值型或字元型的x。下面有一些例子:
> factor(1:3, levels=1:5)
[1] 1 2 3
levels: 1 2 3 4 5
> factor(1:3,labels=c("a","b","c"))
[1] a b c
levels: a b c
> ff <- factor(1:5, exclude=4,labels=c("a","b","c","d"))
> ff
[1] a b c d
levels: a b c d
函式levels用來提取乙個因子中可能的水平值:
> levels(ff)
[1] "a" "b""c" "d"
矩陣(matrix)乙個矩陣實際上是有乙個附加屬性(維數dim)的向量,維數即為乙個長度為2的向量,用來指定矩陣的行數和列數。乙個矩陣可以用函式matrix來建立:
matrix(data = na, nrow = 1, ncol = 1, byrow= false, dimnames = null)
選項byrow表示資料給出的值是要按列填充(預設值)還是按行填充(如果為true)。可以通過選項dimnames給行列命名。
> matrix(data=5, nr=2, nc=2)
[,1] [,2]
[1,] 5 5
[2,] 5 5
> matrix(1:6, 2, 3)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> matrix(1:6, 2, 3, byrow=true)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> matrix(1:6, 2, 3, byrow=true,dimnames=list(c("row1","row2"), c("col1", "col2","col3")))
col1 col2 col3
row1 1 2 3
row2 4 5 6
另一種建立矩陣的方法是給維數適當的賦值(初始值為null):
> x <- 2:9
> x
[1] 2 3 4 5 6 7 8 9
> dim(x)
null
> dim(x) <- c(2, 4)
> x
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 3 5 7 9
資料框(data frame)資料框相當於是乙個向量的陣列,它內部可以包含不同型別的物件。乙個資料框可以由函式read.table間接建立;也可以用函式data.frame來建立。資料框中的向量必須有相同的長度,如果其中有乙個比其它的短,它將「迴圈」整數次(以使得其長度與其它向量相同):
> x <- 1:4; n <- 10; m <- c(10,35); y <- 2:4
> data.frame(x, n)
x n1 1 10
2 2 10
3 3 10
4 4 10
> data.frame(x, m)
x m1 1 10
2 2 35
3 3 10
4 4 35
> data.frame(x, y)
error in data.frame(x, y) : arguments implydiffering number of rows: 4, 3
列名也是可以改變的,例如,data.frame(a1=x,a2=n)。使用者也可以使用row.names給行命名,但是,這個命名向量必須是字元型的而且長度等於這個資料框的行數。最後,注意資料框和矩陣一樣有維數這個屬性。
> df <- data.frame(a1=x, a2=n,row.names=c("row1", "row2", 'row3', 'row4'))
> df
a1 a2
row1 1 10
row2 2 10
row3 3 10
row4 4 10
> dim(df)
[1] 4 2
列表(list)列表可以用list函式建立,方法與建立資料框類似。它對其中包含的物件沒有什麼限制。和data.frame()比較,預設值沒有給出物件的名稱;
時間序列(time-series)函式ts可以由向量(一元時間序列)或者矩陣(多元時間序列)建立乙個ts型物件,並且有一些表明序列特徵的選項(帶有預設值);
列表和時間序列的使用比較複雜,請檢視相關資料。
表示式(expression)表示式型別的物件在r中有著很基礎的地位,是r能夠解釋的字串行。所有有效的命令都是表示式。乙個命令被直接從鍵盤輸入後,它將被r求值,如果是有效的則會被執行。在很多情況下,構造乙個不被求值的表示式是很有用的:這就是函式expresssion要做的。當然也可以隨後用eval()對建立的表示式進行求值。
> x <- 3; y <- 2.5; z <- 1
> exp1 <- expression(x / (y +exp(z)))
> exp1
expression(x/(y+ exp(z)))
> eval(exp1)
[1] 0.5749019
表示式也可以在其它地方用來在圖表中新增公式(p.43);表示式可以由
字元型變數建立;一些函式把表示式當作引數,例如可以求偏導數的函
數d。> d(exp1, "x")
1/(y + exp(z))
> d(exp1, "y")
-x/(y + exp(z))^2
> d(exp1, "z")
-x * exp(z)/(y +exp(z))^2
R語言學習筆記1
1 中文文字挖掘軟體包 tmcn 2 用來消除兩向量 列表 資料框等中的相同行或列用函式 setdiff 3 建立乙個空陣列,用來裝不確定長度資料用方法 a 4 將字串格式日期轉換為date格式用函式 as.date 以數值形式儲存,對於r中規定的標準格式 年 月 日或者 年 月 日,則可以不需要用...
R語言學習筆記(1)
此篇主要涉及r語言的基本操作以及容器vector的各項操作。1.r的基本操作 1 與大部分程式語言不同,r的賦值語句有些不同,在r中主要使用 賦值,而等號 主要是在函式給引數賦初值時才使用。2 r語言中大部分的變數都可以稱之為vector 向量 比如單值a就是只有乙個值的vector。3 r語言中的...
R語言學習筆記1 基礎
一般數字形式的資料都為數值型。class 函式檢視資料型別。x c 1,2,3,4 x 1 1 2 3 4 class x 1 numeric 僅含有整數,且資料型別設定為integer,否則為數值型。as.integer 可以將資料型別強制轉換為整數型。as.datatype 表示將其引數轉換為d...