R語言學習筆記1 物件的建立

2021-06-04 13:00:39 字數 4703 閱讀 3722

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...