【R】數(shù)據(jù)類型及性質(zhì)

存儲模式與基本類型

R的變量可以存儲多種不同的數(shù)據(jù)類型茂嗓, 可以用typeof()函數(shù)來返回一個變量或表達式的類型暇韧。比如

> typeof(1:3)
## [1] "integer"

> typeof(c(1,2,3))
## [1] "double"

> typeof(c(1, 2.1, 3))
## [1] "double"

> typeof(c(TRUE, NA, FALSE))
## [1] "logical"

> typeof('Abc')
## [1] "character"

> typeof(factor(c('F', 'M', 'M', 'F')))
## [1] "integer"

注意因子的結(jié)果是integer而不是因子薪铜。

R還有兩個函數(shù)mode()和storage.mode()起到與typeof()類似的作用, 這是為了提供與S語言兼容所遺留的睦裳, 應停止使用弄砍。

R中數(shù)據(jù)的最基本的類型包括logical, integer, double, character, complex, raw, 其它數(shù)據(jù)類型都是由基本類型組合或轉(zhuǎn)變得到的仙畦。 character類型就是字符串類型, raw類型是直接使用其二進制內(nèi)容的類型音婶。 為了判斷某個向量x保存的基本類型慨畸, 可以用is.xxx()類函數(shù), 如is.integer(x), is.double(x), is.numeric(x), is.logical(x), is.character(x), is.complex(x), is.raw(x)衣式。 其中is.numeric(x)對integer和double內(nèi)容都返回真值寸士。

在R語言中數(shù)值一般看作double, 如果需要明確表明某些數(shù)值是整數(shù), 可以在數(shù)值后面附加字母L碴卧,如

> is.integer(c(1, -3))
## [1] FALSE

> is.integer(c(1L, -3L))
## [1] TRUE

整數(shù)型的缺失值是NA弱卡, 而double型的特殊值除了NA外, 還包括Inf, -Inf和NaN住册, 其中NaN也算是缺失值, Inf和-Inf不算是缺失值婶博。 如:

c(-1, 0, 1)/0
## [1] -Inf  NaN  Inf
is.na(c(-1, 0, 1)/0)
## [1] FALSE  TRUE FALSE

對double類型,可以用is.finite()判斷是否有限值荧飞, NA凡人、Inf, -Inf和NaN都不是有限值名党; 用is.infinite()判斷是否Inf或-Inf; is.na()判斷是否NA或NaN挠轴; is.nan()判斷是否NaN兑巾。

嚴格說來, NA表示邏輯型缺失值忠荞, 但是當作其它類型缺失值時一般能自動識別。 NA_integer_是整數(shù)型缺失值帅掘, NA_real是double型缺失值委煤, NA_character_是字符型缺失值。

在R的向量類型中修档, integer類型碧绞、double類型、logical類型吱窝、character類型讥邻、還有complex類型和raw類型稱為原子類型(atomic types), 原子類型的向量中元素都是同一基本類型的院峡。 比如兴使, double型向量的元素都是double或者缺失值。

除了原子類型的向量照激, 在R語言的定義中发魄, 向量還包括后面要講到的列表(list), 列表的元素不需要屬于相同的基本類型俩垃, 而且列表的元素可以不是單一基本類型元素励幼。 用typeof()函數(shù)可以返回向量的類型, 列表返回結(jié)果為"list":

> typeof(list("a", 1L, 1.5))
## [1] "list"

原子類型的各個元素除了基本類型相同口柳, 還不包含任何嵌套結(jié)構(gòu)苹粟,如:

c(1, c(2,3, c(4,5)))
## [1] 1 2 3 4 5

R有一個特殊的NULL類型, 這個類型只有唯一的一個NULL值跃闹, 表示不存在嵌削。 NULL長度為0, 不能有任何屬性值辣卒。 用is.null()函數(shù)判斷某個變量是否取NULL掷贾。

NULL值可以用來表示類型未知的零長度向量, 如c()沒有自變量時返回值就是NULL荣茫; 也經(jīng)常用作函數(shù)缺省值想帅, 在函數(shù)內(nèi)用is.null()判斷其缺省后再用一定的計算邏輯得到真正的缺省情況下的數(shù)值。

要把NULL與NA區(qū)分開來啡莉, NA是有類型的(integer港准、double旨剥、logical、character等), NA表示存在但是未知浅缸。 數(shù)據(jù)庫管理系統(tǒng)中的NULL值相當于R中的NA值轨帜。

類型轉(zhuǎn)換與類型升檔

可以用as.xxx()類的函數(shù)在不同類型之間進行強制轉(zhuǎn)換。 如

as.numeric(c(FALSE, TRUE))
## [1] 0 1
as.character(sqrt(1:4))
## [1] "1"                "1.4142135623731"  "1.73205080756888" "2"

類型轉(zhuǎn)換也可能是隱含的衩椒,比如蚌父, 四則運算中數(shù)值會被統(tǒng)一轉(zhuǎn)換為double類型, 邏輯運算中運算元素會被統(tǒng)一轉(zhuǎn)換為logical類型毛萌。 邏輯值轉(zhuǎn)換成數(shù)值時苟弛,TRUE轉(zhuǎn)換成1, FALSE轉(zhuǎn)換成0阁将。

在用c()函數(shù)合并若干元素時膏秫, 如果元素基本類型不同, 將統(tǒng)一轉(zhuǎn)換成最復雜的一個做盅,復雜程度從簡單到復雜依次為: logical<integer<double<character缤削。 這種做法稱為類型升檔,如

c(FALSE, 1L, 2.5, "3.6")
## [1] "FALSE" "1"     "2.5"   "3.6"

不同類型參與要求類型相同的運算時吹榴, 也會統(tǒng)一轉(zhuǎn)換為最復雜的類型亭敢, 也稱為類型升檔, 如:

> TRUE + 10
## [1] 11

> paste("abc", 1)
## [1] "abc 1"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末图筹,一起剝皮案震驚了整個濱河市吨拗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婿斥,老刑警劉巖劝篷,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異民宿,居然都是意外死亡娇妓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門活鹰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哈恰,“玉大人,你說我怎么就攤上這事志群∽疟粒” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵锌云,是天一觀的道長荠医。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么彬向? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任兼贡,我火速辦了婚禮,結(jié)果婚禮上娃胆,老公的妹妹穿的比我還像新娘遍希。我一直安慰自己,他們只是感情好里烦,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布凿蒜。 她就那樣靜靜地躺著,像睡著了一般胁黑。 火紅的嫁衣襯著肌膚如雪篙程。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天别厘,我揣著相機與錄音,去河邊找鬼拥诡。 笑死触趴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的渴肉。 我是一名探鬼主播冗懦,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仇祭!你這毒婦竟也來了披蕉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤乌奇,失蹤者是張志新(化名)和其女友劉穎没讲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體礁苗,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡爬凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了试伙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘁信。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疏叨,靈堂內(nèi)的尸體忽然破棺而出潘靖,到底是詐尸還是另有隱情,我是刑警寧澤蚤蔓,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布卦溢,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏既绕。R本人自食惡果不足惜啄刹,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凄贩。 院中可真熱鬧誓军,春花似錦、人聲如沸疲扎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椒丧。三九已至壹甥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間壶熏,已是汗流浹背句柠。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棒假,地道東北人溯职。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像帽哑,于是被迫代替她去往敵國和親谜酒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345