熱線電話:13121318867

登錄
2020-08-20 閱讀量: 3194
R的數據結構

1、R的對象與屬性

我們已經知道R通過一些對象來運行,這些對象是用它們的名稱和內容來 刻畫的,其次也通過對象的數據類型即屬性來刻畫. 所有的對象都有兩個內在 屬性:類型和長度. 類型是對象元素的基本種類,共有四種:

數值型, 包括

– 整型

– 單精度實型

– 雙精度實型

字符型

復數型1

邏輯型(FALSE、TRUE或NA)

雖然還存在其它的類型,例如函數或表達式, 但是它們并不能用來表示數 據;長度是對象中元素的數目. 對象的類型和長度可以分別通過函數mode( ) 和length( )得到. 例如

> x <- 1

> mode(x)

[1] "numeric"

> length(x)

[1] 1

> A <- "Gomphotherium"; compar <- TRUE; z <- 1i > mode(A); mode(compar); mode(z)

[1] "character"

[1] "logical"

[1] "complex"

無論什么類型的數據,缺失數據總是用NA(Not Available的意思)來表示;對很大的數值則可用指數形式表示:

> N <- 2.1e23

>N

[1] 2.1e+23

R可以正確地表示無窮的數值,如用Inf和-Inf表示??8和8,或者用NaN(Not a Number 的意思)表示不是數字的值.

> x <- 5/0

>x

[1] Inf

> exp(x) [1] Inf

> exp(-x)

[1] 0

> Inf - Inf

[1] NaN

> 0/0

[1] NaN

>sqrt{-7)

[1] NaN

Warning message:

產生了NaNs in: sqrt(-17) >sqrt(-17+0i) # 按照復數進行運算 [1] 0+4.123106i

字符型的值輸入時須加上雙引號",如果需要引用雙引號的話,可以讓它 跟在反斜杠“\”后面, 在某些函數如cat( )的輸出顯示或write.table( )寫 入磁盤時會被以特殊的方式處理. 例如

> x <- "Double quotes \" delimitate R's strings." >x

[1] "Double quotes \" delimitate R's strings."

> cat(x)

Double quotes " delimitate R's strings.

另一種表示字符型變量的方法,即用單引號(’)來界定變量,這種情況下不需 要用反斜杠來引用雙引號.

> x <- 'Double quotes " delimitate R\'s strings.'

>x

[1] "Double quotes \" delimitate R's strings."

表2.1概括了表示數據對象的類別:

表 2.1 數據對象及類型

是否允許 對象 類型 同一個對象中 有多種類型?

向量 數值型,字符型,復數型,邏輯型 否 因子 數值型, 字符型 否 數組 數值型,字符型,復數型,邏輯型 否 矩陣 數值型,字符型,復數型,邏輯型 否 數據框 數值型,字符型,復數型,邏輯型 是 時間序列(ts) 數值型,字符型,復數型,邏輯型 否 列表 數值型,字符型,復數型,邏輯型, 是

函數,表達式,...

說明

1) 向量是一個變量(的取值),是R中最常用、最基本的操作對象;因子是一 個分類變量;數組是一個k維的數據表;矩陣是數組的一個特例,其維 數k ?? 2.

注意: 數組或者矩陣中的所有元素都必須是同一種類型的;數據框是由 一個或幾個向量和(或)因子構成,它們必須是等長的,但可以是不同的 數據類型;“ts”表示時間序列數據,它包含一些額外的屬性,例如頻率 和時間;列表可以包含任何類型的對象,包括列表!

2) 對于一個向量,用它的類型和長度足夠描述數據;而其它的對象則另需 一些額外信息,這些信息由外在的屬性給出, 例如這些屬性中的表示對象


維數的dim. 比如一個2行2列的的矩陣,它的dim是一對數值[2,2],但是其

長度是4.

3) R中有三種主要類型的運算符, 表2.2是這些運算符的列表. 其中數學運算 符和比較運算符作用于兩個元素上(例如x + y, a < b);數學運算符不只 是作用于數值型或復數型變量,也可以作用在邏輯型變量上;在后一種 情況中,邏輯型變量被強制轉換為數值型. 比較運算符可以適用于任何 類型:結果是返回一個或幾個邏輯型變量; 邏輯型運算符適用于一個(對 于“!”運算符)或兩個邏輯型對象(對于其它運算符),并且返回一個(或 幾個)邏輯性變量. 運算符“邏輯與”和“邏輯或”存在兩種形式:“&” 和“|”作用在對象中的每一個元素上并且返回和比較次數相等長度的邏 輯值;“&&”和“||”只作用在對象的第一個元素上.

表 2.2 數學運算 比較運算

運算符

+加法<小于 -減法>大于

* 乘法 <= 小于或等于 / 除法 >= 大于或等于 ^ 乘方==等于

%% 模 != 不等于 %/% 整除

!x 邏輯非 x&y 邏輯與 x && y 同上 x|y 邏輯或 x||y 同上 xor(x, y) 異或

邏輯運算

2 、瀏覽對象的信息

函數ls( )的功能是顯示所有在內存中的對象. ls( )只會列出對象名,例

如:

> name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5 > ls( )

[1] "m" "n1" "n2" "name"


2.4 R的數據結構 如果只要顯示出在名稱中帶有某個指定字符的對象,則通過設定選項pattern

來實現(可簡寫為pat) ):

> ls(pat = "m")

[1] "m" "name"

如果進一步限定顯示名稱中以某個字母開頭的對象,則可使用命令:

> ls(pat = "^m")

[1] "m"

運行函數ls.str( )將會顯示內存中所有對象的詳細信息:

> ls.str( )

m: num0.5n1: num10n2: num100name: chr"Carmen"

在ls.str( )函數中另一個非常有用的選項是max.level, 它將規定顯示 有關對象信息的詳細級別. 缺省情況下,ls.str( ) 將會列出關于對象的所有 信息,包括數據框、矩陣,或數據列表的詳細信息, 顯示結果可能會很長. 但如 果設定max.level =-1 就可以避免這種情況了. 試比較:

> M <- data.frame(n1, n2, m)

> ls.str(pat = "M")

M : `data.frame': 1 obs. of 3 variables:

$ n1: num 10 $ n2: num 100 $ m : num 0.5

> ls.str(pat="M", max.level=-1)

M : `data.frame': 1 obs. of 3 variables:

要在內存中刪除某個對象,可利用函數rm( ). 例如

X 運行rm(x)將會刪除對象x

X 運行rm(x,y)將會刪除對象x和y

X 運行rm(list=ls( ))則會刪除內存中的所有對象

X 運行rm(list=ls(pat="^m"))則會刪除對象中以字母m開頭的對象

下面我們通過具體的例子說明向量(包括數值型向量、字符型向量、邏輯型向量和因子型向量)、矩陣、數據框、列表和時間序列的構成方法.


110.0839
0
關注作者
收藏
評論(0)

發表評論

暫無數據
推薦帖子
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码