R语言基础入门(7)之数据类型的性质
生活随笔
收集整理的這篇文章主要介紹了
R语言基础入门(7)之数据类型的性质
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1.存儲模式與基本類型
?2.類屬
3.類型轉換
4.屬性
5.str() 函數
?6.關于賦值
1.存儲模式與基本類型
R語言中根據類型可以將數據劃分為:
- 數值型(numeric)
- 整數型(integer)
- 字符型(character)
- 邏輯型(logical)
- 復數型(complex)
- 原始型(raw)
返回 :
double 型:
typeof(c(1,2,3))返回:
邏輯型:
typeof(c(TRUE, NA, FALSE))返回:
字符串型:
typeof('Abc')返回:
?注:因子返回類型是?integer
typeof(factor(c('F', 'M', 'M', 'F')))返回:
復數型:?
typeof(2 + 1i) #1不能省略返回:
原始型(raw):
a <- charToRaw("rlanguage") #a此時的記錄為72 6c 61 6e 67 75 61 67 65,是字符串中每個字符的原始存儲格式 a typeof(a)返回:
?
為了判斷某個向量 x 保存的基本類型,可以用 is.xxx() 類函數,如 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 內容都返回真值。 在 R 語言中數值一般看作 double, 如果需要明確表明某些數值是整數,可以在數值后面附加字母 L,如 is.integer(c(1, -3))返回:
is.integer(c(1L, -3L))返回:
整數型的缺失值是 NA,而 double 型的特殊值除了 NA 外,還包括 Inf, -Inf 和 NaN,其中 NaN 也算是缺失值, Inf 和-Inf 不算是缺失值。 對 double 類型,可以用 is.finite() 判斷是否有限值,NA、Inf, -Inf 和 NaN 都不是有限值;用 is.infinite() 判斷是否 Inf 或-Inf;is.na() 判斷是否 NA 或 NaN;is.nan() 判斷是否 NaN。 如: c(-1, 0, 1)/0返回:
?我們來判斷一下結果是否為缺失值:
is.na(c(-1, 0, 1)/0)返回:
嚴格說來,NA 表示邏輯型缺失值,但是當作其它類型缺失值時一般能自動識別。NA_integer_ 是整數型缺失值,NA_real_ 是 double 型缺失值,NA_character_ 是字符型缺失值。 在 R 的向量類型中,integer 類型、double 類型、logical 類型、character 類型、還有 complex 類型和 raw 類型稱為原子類型 (atomic types),原子類型的向量中元素都是同一基本類型的。比如,double 型向量的元素都是 double 或者缺失值。除了原子類型的向量,在 R 語言的定義中,向量還包括后面要講到的列表(list),列表的元素不需要屬于相同的基本類型,而且列表的元素可以 不是單一基本類型元素。 用 typeof() 函數可以返回向量的類型,列表返回結果為"list",如 typeof(list("a", 1L, 1.5))返回:
?原子類型的各個元素除了基本類型相同,還不包含任何嵌套結構,如:
c(1, c(2,3, c(4,5)))返回:
?2.類屬
R 具有一定的面向對象語言特征,其數據類型有一個 class 屬性,函數 class() 可以返回變量類型的類屬,可以用使用以下函數查看數據的類屬,但返回結果有差別: typeof(x) class(x) mode() storage.mode() 比如 typeof(factor(c('F', 'M', 'M', 'F')))返回:
mode(factor(c('F', 'M', 'M', 'F')))返回:
storage.mode(factor(c('F', 'M', 'M', 'F')))返回:
class(factor(c('F', 'M', 'M', 'F')))返回:
class(as.numeric(factor(c('F', 'M', 'M', 'F'))))返回:
R 有一個特殊的 NULL 類型,這個類型只有唯一的一個 NULL 值,表示不存在。要把 NULL 與 NA 區分開來,NA 是有類型的(integer、double、logical、character 等), NA 表示存在但是未知。用 is.null() 函數判斷某個變量是否取 NULL。3.類型轉換
可以用 as.xxx() 類的函數在不同類型之間進行強制轉換。如 轉換為數值型 as.numeric(c(FALSE, TRUE))返回:
轉換為字符型
as.character(sqrt(1:4))返回:
類型轉換也可能是隱含的,比如,四則運算中數值會被統一轉換為 double 類 型,邏輯運算中運算元素會被統一轉換為 logical 類型。邏輯值轉換成數值時,TRUE 轉換成 1,FALSE 轉換成 0。
在用 c() 函數合并若干元素時,如果元素基本類型不同,將統一轉換成最復雜的 一個,復雜程度從簡單到復雜依次為:logical<integer<double<character。 如 c(FALSE, 1L, 2.5, "3.6")返回:
?不同類型參與要求類型相同的運算時,也會統一轉換為最復雜的類型,如:
TRUE + 10返回:
paste("abc", 1)返回:
4.屬性
除了 NULL 以外,R 的變量都可以看成是對象,都可以有屬性。 在 R 語言中, 屬性是把變量看成對象后,除了其存儲內容(如元素)之外的其它附加信息,如 維數、類屬等。對象 x 的所有屬性可以用 attributes() 讀取,如 定義x x <- table(c(1,2,1,3,2,1)); print(x)返回:
讀取x的屬性
attributes(x)返回:
table() 函數用了輸出其自變量中每個不同值的出現次數,稱為頻數。從上例可以看出,table() 函數的結果有三個屬性,前兩個是 dim 和 dimnames, 這是數組 (array) 具有的屬性;另一個是 class 屬性,值為"table"。因為 x 是數組,可以訪問如 x <- table(c(1,2,1,3,2,1)) x[1]返回:
x["3"]返回:
?也可以用 attributes() 函數修改屬性,如
attributes(x) <- NULL x返回:
?如上修改后 x 不再是數組,也不是 table。
class 屬性是特殊的。如果一個對象具有 class 屬性,某些所謂 “通用函數 (generic functions)” 會針對這樣的對象進行專門的操作,比如,print() 函數在顯示向量和回歸結果時采用完全不同的格式。這在其它程序設計語言中稱為 “重載”(overloading)。 可以用 attr(對象, " 屬性名") 讀取和修改單個屬性。向量的元素名是 names 屬性,例如 ages <- c(" 李明"=30, " 張聰"=25, " 劉穎"=28) names(ages)返回:
attr(ages, "names")返回:
attr(ages, "names") <- NULL ages返回:
?還可以用 unname() 函數返回一個去掉了 names 屬性的副本。
5.str() 函數
用 print() 函數可以顯示對象內容。如果內容很多,顯示行數可能也很多。用 str() 函數可以顯示對象的類型和主要結構及典型內容。例如 s <- 101:200 attr(s,'author') <- ' 李小明' attr(s,'date') <- '2016-09-12' str(s)返回:
6.關于賦值
要注意的是,在 R 中賦值本質上是把一個存儲的對象與一個變量名聯系在一起 (binding),多個變量名可以指向同一個對象。對于基本的數據類型如數值型向量,兩個指向相同對象的變量當一個變量被修改時自動制作副本,如 x <- 1:5 y <- x y[3] <- 0 x返回:
?
y返回:
這里如果 y 沒有與其它變量指向同一對象,則修改時直接修改該對象而不制作副本。 但是對于有些比較復雜的類型,兩個指向同一對象的變量是同步修改的。這樣的類型的典型代表是閉包 (closure),它帶有一個環境,環境的內容是不自動制作副本的。總結
以上是生活随笔為你收集整理的R语言基础入门(7)之数据类型的性质的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沉降观测曲线图 沉降观测汇总_这些沉降观
- 下一篇: mysql5.6 python_Cent