8 R数据类型的性质

您所在的位置:网站首页 r语言type=p 8 R数据类型的性质

8 R数据类型的性质

2024-07-15 16:27| 来源: 网络整理| 查看: 265

8 R数据类型的性质 8.1 存储模式与基本类型

R的变量可以存储多种不同的数据类型, 可以用typeof()函数来返回一个变量或表达式的类型。比如

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"

注意因子的结果是integer而不是因子。

R还有两个函数mode()和storage.mode()起到与typeof()类似的作用, 这是为了提供与S语言兼容所遗留的, 应停止使用。

R中数据的最基本的类型包括logical, integer, double, character, complex, raw, 其它数据类型都是由基本类型组合或转变得到的。 character类型就是字符串类型, raw类型是直接使用其二进制内容的类型。 为了判断某个向量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)) ## [1] FALSE is.integer(c(1L, -3L)) ## [1] TRUE

整数型的缺失值是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_是整数型缺失值, 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)) ## [1] "list"

原子类型的各个元素除了基本类型相同, 还不包含任何嵌套结构,如:

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

R有一个特殊的NULL类型, 这个类型只有唯一的一个NULL值, 表示不存在。 NULL长度为0, 不能有任何属性值。 用is.null()函数判断某个变量是否取NULL。

NULL值可以用来表示类型未知的零长度向量, 如c()没有自变量时返回值就是NULL; 也经常用作函数缺省值, 在函数内用is.null()判断其缺省后再用一定的计算逻辑得到真正的缺省情况下的数值。

要把NULL与NA区分开来, NA是有类型的(integer、double、logical、character等), NA表示存在但是未知。 数据库管理系统中的NULL值相当于R中的NA值。

8.2 类型转换与类型升档

可以用as.xxx()类的函数在不同类型之间进行强制转换。 如

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

类型转换也可能是隐含的,比如, 四则运算中数值会被统一转换为double类型, 逻辑运算中运算元素会被统一转换为logical类型。 逻辑值转换成数值时,TRUE转换成1, FALSE转换成0。

在用c()函数合并若干元素时, 如果元素基本类型不同, 将统一转换成最复杂的一个,复杂程度从简单到复杂依次为: logical



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3