1、R的對(duì)象與屬性
我們已經(jīng)知道R通過(guò)一些對(duì)象來(lái)運(yùn)行,這些對(duì)象是用它們的名稱和內(nèi)容來(lái) 刻畫的,其次也通過(guò)對(duì)象的數(shù)據(jù)類型即屬性來(lái)刻畫. 所有的對(duì)象都有兩個(gè)內(nèi)在 屬性:類型和長(zhǎng)度. 類型是對(duì)象元素的基本種類,共有四種:
數(shù)值型, 包括
– 整型
– 單精度實(shí)型
– 雙精度實(shí)型
字符型
復(fù)數(shù)型1
邏輯型(FALSE、TRUE或NA)
雖然還存在其它的類型,例如函數(shù)或表達(dá)式, 但是它們并不能用來(lái)表示數(shù) 據(jù);長(zhǎng)度是對(duì)象中元素的數(shù)目. 對(duì)象的類型和長(zhǎng)度可以分別通過(guò)函數(shù)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"
無(wú)論什么類型的數(shù)據(jù),缺失數(shù)據(jù)總是用NA(Not Available的意思)來(lái)表示;對(duì)很大的數(shù)值則可用指數(shù)形式表示:
> N <- 2.1e23
>N
[1] 2.1e+23
R可以正確地表示無(wú)窮的數(shù)值,如用Inf和-Inf表示??8和8,或者用NaN(Not a Number 的意思)表示不是數(shù)字的值.
> 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:
產(chǎn)生了NaNs in: sqrt(-17) >sqrt(-17+0i) # 按照復(fù)數(shù)進(jìn)行運(yùn)算 [1] 0+4.123106i
字符型的值輸入時(shí)須加上雙引號(hào)",如果需要引用雙引號(hào)的話,可以讓它 跟在反斜杠“\”后面, 在某些函數(shù)如cat( )的輸出顯示或write.table( )寫 入磁盤時(shí)會(huì)被以特殊的方式處理. 例如
> x <- "Double quotes \" delimitate R's strings." >x
[1] "Double quotes \" delimitate R's strings."
> cat(x)
Double quotes " delimitate R's strings.
另一種表示字符型變量的方法,即用單引號(hào)(’)來(lái)界定變量,這種情況下不需 要用反斜杠來(lái)引用雙引號(hào).
> x <- 'Double quotes " delimitate R\'s strings.'
>x
[1] "Double quotes \" delimitate R's strings."
表2.1概括了表示數(shù)據(jù)對(duì)象的類別:
表 2.1 數(shù)據(jù)對(duì)象及類型
是否允許 對(duì)象 類型 同一個(gè)對(duì)象中 有多種類型?
向量 數(shù)值型,字符型,復(fù)數(shù)型,邏輯型 否 因子 數(shù)值型, 字符型 否 數(shù)組 數(shù)值型,字符型,復(fù)數(shù)型,邏輯型 否 矩陣 數(shù)值型,字符型,復(fù)數(shù)型,邏輯型 否 數(shù)據(jù)框 數(shù)值型,字符型,復(fù)數(shù)型,邏輯型 是 時(shí)間序列(ts) 數(shù)值型,字符型,復(fù)數(shù)型,邏輯型 否 列表 數(shù)值型,字符型,復(fù)數(shù)型,邏輯型, 是
函數(shù),表達(dá)式,...
說(shuō)明
1) 向量是一個(gè)變量(的取值),是R中最常用、最基本的操作對(duì)象;因子是一 個(gè)分類變量;數(shù)組是一個(gè)k維的數(shù)據(jù)表;矩陣是數(shù)組的一個(gè)特例,其維 數(shù)k ?? 2.
注意: 數(shù)組或者矩陣中的所有元素都必須是同一種類型的;數(shù)據(jù)框是由 一個(gè)或幾個(gè)向量和(或)因子構(gòu)成,它們必須是等長(zhǎng)的,但可以是不同的 數(shù)據(jù)類型;“ts”表示時(shí)間序列數(shù)據(jù),它包含一些額外的屬性,例如頻率 和時(shí)間;列表可以包含任何類型的對(duì)象,包括列表!
2) 對(duì)于一個(gè)向量,用它的類型和長(zhǎng)度足夠描述數(shù)據(jù);而其它的對(duì)象則另需 一些額外信息,這些信息由外在的屬性給出, 例如這些屬性中的表示對(duì)象
維數(shù)的dim. 比如一個(gè)2行2列的的矩陣,它的dim是一對(duì)數(shù)值[2,2],但是其
長(zhǎng)度是4.
3) R中有三種主要類型的運(yùn)算符, 表2.2是這些運(yùn)算符的列表. 其中數(shù)學(xué)運(yùn)算 符和比較運(yùn)算符作用于兩個(gè)元素上(例如x + y, a < b);數(shù)學(xué)運(yùn)算符不只 是作用于數(shù)值型或復(fù)數(shù)型變量,也可以作用在邏輯型變量上;在后一種 情況中,邏輯型變量被強(qiáng)制轉(zhuǎn)換為數(shù)值型. 比較運(yùn)算符可以適用于任何 類型:結(jié)果是返回一個(gè)或幾個(gè)邏輯型變量; 邏輯型運(yùn)算符適用于一個(gè)(對(duì) 于“!”運(yùn)算符)或兩個(gè)邏輯型對(duì)象(對(duì)于其它運(yùn)算符),并且返回一個(gè)(或 幾個(gè))邏輯性變量. 運(yùn)算符“邏輯與”和“邏輯或”存在兩種形式:“&” 和“|”作用在對(duì)象中的每一個(gè)元素上并且返回和比較次數(shù)相等長(zhǎng)度的邏 輯值;“&&”和“||”只作用在對(duì)象的第一個(gè)元素上.
表 2.2 數(shù)學(xué)運(yùn)算 比較運(yùn)算
運(yùn)算符
+加法<小于 -減法>大于
* 乘法 <= 小于或等于 / 除法 >= 大于或等于 ^ 乘方==等于
%% 模 != 不等于 %/% 整除
!x 邏輯非 x&y 邏輯與 x && y 同上 x|y 邏輯或 x||y 同上 xor(x, y) 異或
邏輯運(yùn)算
2 、瀏覽對(duì)象的信息
函數(shù)ls( )的功能是顯示所有在內(nèi)存中的對(duì)象. ls( )只會(huì)列出對(duì)象名,例
如:
> name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0.5 > ls( )
[1] "m" "n1" "n2" "name"
2.4 R的數(shù)據(jù)結(jié)構(gòu) 如果只要顯示出在名稱中帶有某個(gè)指定字符的對(duì)象,則通過(guò)設(shè)定選項(xiàng)pattern
來(lái)實(shí)現(xiàn)(可簡(jiǎn)寫為pat) ):
> ls(pat = "m")
[1] "m" "name"
如果進(jìn)一步限定顯示名稱中以某個(gè)字母開(kāi)頭的對(duì)象,則可使用命令:
> ls(pat = "^m")
[1] "m"
運(yùn)行函數(shù)ls.str( )將會(huì)顯示內(nèi)存中所有對(duì)象的詳細(xì)信息:
> ls.str( )
m: num0.5n1: num10n2: num100name: chr"Carmen"
在ls.str( )函數(shù)中另一個(gè)非常有用的選項(xiàng)是max.level, 它將規(guī)定顯示 有關(guān)對(duì)象信息的詳細(xì)級(jí)別. 缺省情況下,ls.str( ) 將會(huì)列出關(guān)于對(duì)象的所有 信息,包括數(shù)據(jù)框、矩陣,或數(shù)據(jù)列表的詳細(xì)信息, 顯示結(jié)果可能會(huì)很長(zhǎng). 但如 果設(shè)定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:
要在內(nèi)存中刪除某個(gè)對(duì)象,可利用函數(shù)rm( ). 例如
X 運(yùn)行rm(x)將會(huì)刪除對(duì)象x
X 運(yùn)行rm(x,y)將會(huì)刪除對(duì)象x和y
X 運(yùn)行rm(list=ls( ))則會(huì)刪除內(nèi)存中的所有對(duì)象
X 運(yùn)行rm(list=ls(pat="^m"))則會(huì)刪除對(duì)象中以字母m開(kāi)頭的對(duì)象
下面我們通過(guò)具體的例子說(shuō)明向量(包括數(shù)值型向量、字符型向量、邏輯型向量和因子型向量)、矩陣、數(shù)據(jù)框、列表和時(shí)間序列的構(gòu)成方法.








暫無(wú)數(shù)據(jù)