搜索
查看: 631|回复: 0

[R] chapter 15

[复制链接]

31

主题

36

帖子

1013

积分

金牌会员

Rank: 6Rank: 6

积分
1013
发表于 2018-10-29 13:04:31 | 显示全部楼层 |阅读模式
# chapter 15
载入一下包,开始学习
[AppleScript] 纯文本查看 复制代码
library(tidyverse)


# 向量基础
# 两种类型向量
#1 原子向量
# 6种类型 逻辑型、整型、双精度型、字符型、复数型、原始型;
# 整型和双精度型向量统称为数值型向量
#2 列表,即递归向量

# 原子向量中的各个值都是同种类型;列表中的各个值可以是不同类型的
# NULL用于表示空向量,通常指长度为0的向量

# 向量的两个关键属性
#1 类型
# 可以使用typeof()确定向量类型
[AppleScript] 纯文本查看 复制代码
typeof(letters)

typeof(1:10)


#2 长度
# 可以使用length()确定向量的长度
[AppleScript] 纯文本查看 复制代码
x <- list("a","b",1:10)

length(x)


# 特性——向量中任意添加额外的元数据
# 特性可用于创建扩展向量,以执行新操作,比较重要的扩展向量有4种类型
#1、 基于整型向量构建的因子
#2-3、 基于数值型向量构建的日期和日期时间
#4、 基于列表构建的数据框和tibble

# 重要的原子向量
#1、 逻辑型——只有三个可能的取值:F、T、NA
[AppleScript] 纯文本查看 复制代码
1:10 %% 3 == 0


#2、 数值型——包括整型与双精度型,R中默认数值是双精度型的
#    如想创建整型数值,可以在数字后加一个L
[AppleScript] 纯文本查看 复制代码
typeof(1)

typeof(1L)

# 整型和双精度型见重要的两个区别
#(1)双精度型是近似值,表示浮点数,不能由固定数量的内存精确表示

[AppleScript] 纯文本查看 复制代码
x <- sqrt(2)^2

x

x-2 == 0 # 比较浮点数时,不能使用 == ,应该使用dplyr::near()

x - 2


#(2)整型数据中有一个特殊值NA;双精度型有4个:NA,NaN,Inf,-Inf
# NaN、Inf、-Inf都可以由除法产生
# 不能使用==检查特殊值,应该使用辅助函数is.finite()、is.infinite()、is.nan()

# 缺失值
# 每种类型的原子向量都有自己的缺失值
[AppleScript] 纯文本查看 复制代码
NA

NA_integer_

NA_real_

NA_character_


# 使用原子向量
#1 强制转换
#1、1 显式强制转换
# as.logical()、as.integer()等就是显式强制转换
#1、2 隐式强制转换
# 在特殊的上下文环境中使用向量,该环境要求使用特定类型的向量时,就换发生隐式强制转换
# 书中展示的一种隐式强制转换:数值环境中使用逻辑向量

[AppleScript] 纯文本查看 复制代码
x <- sample(20,100,replace =T) 

y <- x > 10

y

sum(y)

mean(y)


# 原子向量中不能包含不同类型的元素,因为类型是整个向量的一种属性

# 检验函数
# 检验向量类型的一种方法是使用typeof(),另一种是使用检验函数返回T或F
# 更为可靠的方法是使用purrr包提供的is_*函数族

# 标量与循环规则
# 向量循环——对向量长度进行强制转换
# R会将较短的向量重复到与较长的向量相同的长度
[AppleScript] 纯文本查看 复制代码
sample(10) + 100

runif(10) > 0.5



1:10 + 1:2



tibble(x = 1:4,y = 1:2)



tibble(x=1:4,y = rep(1:2,2))

tibble(x=1:4,y = rep(1:2,each = 2))

# 注意以上两个的区别,each将1、2分别重复两次,如果不指定each,默认1,2,1,2

# 向量取子集
#1 使用仅包含整数的数值向量,要么全部为正数,或全为负数,或为0
# 使用正整数取子集时,可保持相应位置的元素
[AppleScript] 纯文本查看 复制代码
x <- c("one","two","three","four","five") 

x[c(3,2,5)]


# 位置可重复,可生成比输入更长的输出结果
[AppleScript] 纯文本查看 复制代码
x[c(3,2,5,4,5,5)]

# 使用负整数取子集,会丢弃相应位置的元素
[AppleScript] 纯文本查看 复制代码
x[c(-2,-3)]

# 正数与负数混合使用会引发错误
[AppleScript] 纯文本查看 复制代码
x[c(1,-1)]

# 使用0来取子集,不会返回任何值
#2 使用逻辑向量取子集,一般与比较函数结合使用最佳
[AppleScript] 纯文本查看 复制代码
x <- c(10,3,NA,5,81,NA)

# x中的所有非缺失值
[AppleScript] 纯文本查看 复制代码
x[!is.na(x)]


# x中的所有偶数值(或缺失值)
[AppleScript] 纯文本查看 复制代码
x[x %% 2 == 0]

#3 若为命名向量,可使用字符向量来取子集
[AppleScript] 纯文本查看 复制代码
x <- c(abc = 1,def = 2,xyz = 5)

x[c("xyz","def")]

#4 取子集的最简方式是什么都不写,例如,x是二维的,x[1,]可返回第一行和所有列,
#  x[,-1]可选出行和除第一列外的所有列
#5 [[是[的重要变体,只提取单个元素,并丢弃名称

# 递归向量(列表)
[AppleScript] 纯文本查看 复制代码
x <- list(1,2,3)

x



str(x)


# list()可包含不同类型的对象
[AppleScript] 纯文本查看 复制代码
y <- list("a",1L,1.5,T)

str(y)


# 列表取子集
[AppleScript] 纯文本查看 复制代码
a <- list(a = 1:3, b = "a string", c = pi, d = list(-1,-5))

#1 使用[]提取子列表,其结果总是一个列表
[AppleScript] 纯文本查看 复制代码
str(a[1:2])

#2 使用[[提取单个元素,该方式会从列表中删除一个层次等级
[AppleScript] 纯文本查看 复制代码
str(a[[1]])

#3 提取列表命名元素的简单方式,作用于[[相同
[AppleScript] 纯文本查看 复制代码
a$a

a[["a"]]


# 特性
# 任何向量都可通过特性来附加任意元数据,特性可看做可附加在任何对象上的一个向量命名列表,
# 可使用attr()读取和设置单个特性值
[AppleScript] 纯文本查看 复制代码
x <- 1:10

attr(x,"greeting")

attr(x,"greeting") <- "Hi!"

attr(x,"farewell") <- "Bye!"

attr(x,"farewell")

attributes(x)

# 3种特别重要的特性
# 名称——命名向量元素
# 维度——使向量可像矩阵或数组
# 类——实现面向对象的S3系统

# 扩展向量
#1 因子——表示分类数据,只能在固定集合中取值
[AppleScript] 纯文本查看 复制代码
x <- factor(c("ab","cd","ab"),levels = c("ab","cd","ef")) 

typeof(x)

#2 日期和日期时间
#3 tibble——拓展的列表
# 3个类——tbl_df、tbl、data.frame
# 2个特性——(列)names和row.names


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:1027 chapter 11 and 12
下一篇:小洁详解《R数据科学》--第九章 dplyr处理关系
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-8-19 14:46 , Processed in 0.095762 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.