R语言入门——R对象
R对象
一、原子型向量
也可以生成只包含一个值的原子型向量。在这种情况下,R将这个单值存储为一个长度为1的原子型向量。
die <- 1:6
five <- 5
five
is.vector(five)
length(five)
length(die)
r

1、双整型
把双整型称作数值型(numeric)。
双整型向量用来存储普通的数值型数据。数值可正可负,可大可小,可包含小数部分,也可不包含。总之,你在R中键入的任何一个数值都会默认以双整型存储。
die <- c(1,2,3,4,5,6)
die
typeof(die)#查看类型
r

2、整型
在R中,明确设定整型的方法是在该数值之后加上大写字母L
int <- c(-1L,2L,4L)
int
typeof(int)
r

如果不明确加上L,R并不会将一个数值设定为整型。未加L的整数将被存储为双整型。
3、字符型
字符型向量存储一小段文本。在R中,字符要加双引号,再组合起来构成一个字符型向量。
text <- c("hello","World")
text
typeof(text)
typeof("Hello")
r

- 字符型向量中的单个元素称作字符串(string)。请注意,字符串不仅可以包含英文字母,也可以由数字或者符号组成。
- 在R中,任何加双引号的对象都会被当作字符串,无论双引号内是什么元素。
- R中的字符串很容易与R对象混淆,注意区分。
4、逻辑型
逻辑型向量用来存储TRUE(真)和FALSE(假),这是R中布尔数据的表现形式
只要在R中键入全部大写的TRUE或FALSE(不加双引号),就会被当作逻辑型数据。R也会默认把T和F分别当作TRUE和FALSE的简写。
logic <- c(TRUE,FALSE,TRUE)
logic
typeof(logic)
typeof(F)
r

5、复数类型和原始类型
在分析数据时,基本不会用到这两个类型。
复数类型向量用来存储复数。要生成一个复数类型向量,只需要将某个数字与带i的虚数项相加即可。

原始类型向量用来存储数据的原始字节。原始类型向量的生成较为复杂,但是如果要生成一个长度为n的空原始类型向量,可以用raw(n)

练习
生成一个原子型向量来存储皇家同花顺的牌面,例如,一张黑桃A、一张黑桃K、一张黑桃Q、一张黑桃J和一张黑桃10。在这一手牌当中,黑桃A的牌面是A(ace),花色是黑桃(spades)
hand <- c("ace","king","queen","jack","ten")
hand
typeof(hand)
r

二、属性
- 可以将属性赋予一个原子型向量(或者任意一个R对象)
- 用attributes函数可以查看一个对象包含哪些属性信息。如果一个对象没有任何属性信息,attributes会返回结果 NULL,即空值。像die这样的原子型向量,除非人为地加上一些属性,否则它不附带任何属性值。

1、名称属性
一个原子型向量最常见的三种属性是:名称(name)、维度(dim)和类(class)。每种属性都有自己的辅助函数,以将相应的属性附加给某个R对象。对于某些附有属性的R对象,还可以使用这些辅助函数查询它们所包含的属性具体是什么。
例如,可以用辅助函数names查询die对象的名称属性。

利用辅助函数,可以将一串字符向量赋给die对象,作为它的名称属性值。
这个字符向量的长度应该与die等长,每个字符元素都对应die中相应位置元素的名称。
names(die) <- c("one","two","three","four","five","six")
die
attributes(die)
r

- 名称属性值并不会对向量中的实际值产生影响,即便是改变了向量中元素的取值,名称属性值也不会改变。
- 更改名称属性,只要将新的名称赋给names函数即可。
- 要想一次性删除名称属性值,需要将NULL赋给names函数。
die+1#对die值加1
names(die) <- c("uno","dos","tres","qua","cinco","seis")#更改属性名称
die
names(die) <- NULL#删除名称属性值
r

2、维度属性
原子型向量可以转换成一个n维数组(array),方法是用dim函数将相应的维度属性赋给该向量。
比如说,可以将向量die重新组织成一个2×3的矩阵(含有两行三列)。
die <- 1:6
die
dim(die) <- c(2,3)
die
r

三、矩阵
矩阵将数值存储在一个二维数组中。
matrix函数随后会根据nrow参数设定的数值将向量中的元素重新排列成一个具有nrow行的矩阵。你也可以使用ncol参数告诉R应该将矩阵排成多少列。
m <- matrix(die,nrow = 2)
m
r

matrix函数默认的排列方式是先排满第一列再排第二列。你也可以将其排列方式改为按照行优先的顺序进行排列,只需设置参数byrow=TRUE。
m <- matrix(die,nrow = 2,byrow = TRUE)
m
r

四、数组
array函数用来生成一个n维数组。
ar <- array(c(11:14,21:24,31:34),dim = c(2,2,3))
ar
r

练习
生成矩阵,存储了以手皇家同花顺的牌面,和花色信息。
hand1 <- c("ace","king","jack","ten","spades","spades","spades","spades","spades","spades")
matrix(hand1,nrow = 5)
matrix(hand1,ncol = 2)
r

dim=c(5,2))不可实现。
array不用于生成二维数组。
五、类
更改对象的维度并不会改变其类型,但是会改变这个对象的class属性。
attributes(die)
class("hello")
class(5)
r

1、日期与时间
Sys.time()看一看结果。它会返回计算机的当前时间。屏幕上显示出来的时间信息看起来像是一串字符,但其实它的类型是双整型。它的类是POSIXct和POSIXt
now <- Sys.time() #查看当前时间
now
typeof(now)#查看类型
class(now)#查看类
r

2、因子
向factor函数传递一个原子型向量即可生成一个因子。

使用unclass函数,可以看到R到底是如何存储因子的。

R在显示因子信levels息时使用了它的属性。每一个1都显示为female,也就是levels中的第一个标签;每一个2都显示为male,也就是第二个标签。如果这个因子中还有数值3的话,相应地会显示第三个标签,以此类推。
可以用as,character函数将一个因子强制转换成字符串。R会将因子的标签信息保存为一个字符串向量,摈弃内存中的整数值信息。

六、强制转换
R在强制转换数据类型时始终遵循同样的规则。如果向量中有字符型元素,那么所有其他元素会被强制转换成字符型。如果向量中只有数值型和逻辑型,那么逻辑型会被强制转换成数值型。
sum(c(TRUE,TRUE,FALSE,FALSE))
会变成:
sum(c(1,1,,0,0))
r

也可以明确告诉R将数据从一种类型强制转换为另外的类型,这里要用到as系列函数。
as.character(1)
as.logical(1)
as.numeric(FALSE)
r

七、列表
列表将数据组织在一个一维集合中,组织的是R对象,如原子型向量及其他列表。 list函数创建列表的方式与c函数创建向量的方式相似。
list1 <- list(100:130,"R",list(TRUE,FALSE))
list1
r

练习
用一个列表存储一张扑克牌,比如点数为的红桃A。该列表应该将这张牌的牌面 (ace)、花色(hearts)和点数(1)信息存储在不同的元素之中。
card <- list("ace","hearts",1)
card
r

八、数据框
数据框将向量组织在一个二维的表格之中。每一个向量都是这个表格中的一列。因此,数据框中的每一列都可以用来存储一种类型的数据,列与列之间的数据类型可以不同,但是每一列中的所有元素都必须是同一种类型的数据。
数据框以列为单位组织数据。不同的列可以包含不同的数据类型数据框中的每一列都必须具有相同的长度。

需要确保每个向量的长度相等,因为数据框不能组合不等长的向量。
df <- data.frame(face=c("ace","two","six"),suit=c("clubs","clubs","clubs"),value = c(1,2,3))
df
r

九、加载数据
- deck数据框可以从文件deck.csv中加载。
- deck.csv是一个逗号分隔值(Comma-Separated-Values)文件,简称CSV文件。这是一种纯文本文件,也就是说可以通过文本编辑器(以及其他很多程序)直接打开CSV文件.如果打开deck.csv,就会发现它包含类似于下面的数据表信息。表中的每一行都代表着一串完整的信息,因此明显各占一行,行元素之间用逗号分隔。
任何一个CSV文件都具有类似的格式。
"face","suit","value"
"king","spades",13
"queen","spades",12
head(deck)#读取文件
- head和tail是用于快速检视大型数据集的两个很好用的函数。
- head用于检视数据集的 前六行数据,而tail会返回数据集的最后六行数据.
十、保存数据
先将deck数据框保存为一个新的csv文件中, 接着用write.csv命令将任意一个数据框保存为csv文件。要保存deck数据框,可以以下命令。
write.csv(deck,file="cards.csv",row.names=FALSE)
r
- R会将数据框转换成逗号分隔的纯文本文件,并将该文件保存在当前工作目录下。
- 添加参数row.names=FALSE可以避免R在存储数据时,在数据框的开头毫无必要地添加一列数字,这些数字(1-52) 是用来识别不同行的行号。
R中最常用的数据结构为向量、矩阵、数组、列表和数据框

