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開頭的對象
下面我們通過具體的例子說明向量(包括數值型向量、字符型向量、邏輯型向量和因子型向量)、矩陣、數據框、列表和時間序列的構成方法.








暫無數據