搜索
查看: 253|回复: 0

[R] 小洁详解《R数据科学》--第十五章 向量(下)

[复制链接]

25

主题

49

帖子

326

积分

中级会员

Rank: 3Rank: 3

积分
326
发表于 2018-11-26 14:08:15 | 显示全部楼层 |阅读模式
本帖最后由 hijack 于 2018-11-26 14:08 编辑

还是先
[AppleScript] 纯文本查看 复制代码
library(tidyverse)
#> ── Attaching packages ────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
#> ✔ ggplot2 3.0.0     ✔ purrr   0.2.5
#> ✔ tibble  1.4.2     ✔ dplyr   0.7.6
#> ✔ tidyr   0.8.1     ✔ stringr 1.3.1
#> ✔ readr   1.1.1     ✔ forcats 0.3.0
#> ── Conflicts ───────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag()    masks stats::lag()
5.递归向量
  • 创建
[AppleScript] 纯文本查看 复制代码
#创建原子向量-c()
x <- c(1, 2, 3)
#创建列表 list()
x <- list(1, 2, 3)
#查看列表结构
str(x)
#> List of 3
#>  $ : num 1
#>  $ : num 2
#>  $ : num 3

  • 可以包含不同类型的对象
[AppleScript] 纯文本查看 复制代码
y <- list("a", 1L, 1.5, TRUE)
str(y)
#> List of 4
#>  $ : chr "a"
#>  $ : int 1
#>  $ : num 1.5
#>  $ : logi TRUE

  • 列表甚至可以包含其他列表
[AppleScript] 纯文本查看 复制代码
z <- list(list(1, 2), list(3, 4))
str(z)
#> List of 2
#>  $ :List of 2
#>   ..$ : num 1
#>   ..$ : num 2
#>  $ :List of 2
#>   ..$ : num 3
#>   ..$ : num 4
5.1列表取子集
[AppleScript] 纯文本查看 复制代码
a <- list(a = 1:3, b = "a string", c = pi, d = list(-1, -5))

  • [] 提取子列表
[AppleScript] 纯文本查看 复制代码
str(a[1:2])
#> List of 2
#>  $ a: int [1:3] 1 2 3
#>  $ b: chr "a string"
str(a[4])
#> List of 1
#>  $ d:List of 2
#>   ..$ : num -1
#>   ..$ : num -5

-[[]]或$提取元素 降低一个层级
[AppleScript] 纯文本查看 复制代码
str(a[[1]])
#>  int [1:3] 1 2 3
str(a[[4]]) #和str(a[4])对比一下
#> List of 2
#>  $ : num -1
#>  $ : num -5
a$a
#> [1] 1 2 3

第六节应该是个超纲题!
6.特性
[AppleScript] 纯文本查看 复制代码
x <- 1:10
attr(x, "greeting") <- "Hi!"
attr(x, "farewell") <- "Bye!"
attributes(x)
#> $greeting
#> [1] "Hi!"
#> 
#> $farewell
#> [1] "Bye!"
好像很抽象,结合?attr给出的例子和下面的重点。进行了一些摸索
[AppleScript] 纯文本查看 复制代码
#维度
attr(x,"dim") <- c(2, 5)
x
#>      [,1] [,2] [,3] [,4] [,5]
#> [1,]    1    3    5    7    9
#> [2,]    2    4    6    8   10
#> attr(,"greeting")
#> [1] "Hi!"
#> attr(,"farewell")
#> [1] "Bye!"
#名称
y <- c(1,3,5)
attr(y,"names") <- c("a","b","c")
y
#> a b c 
#> 1 3 5
#我成功的发现这就是命名操作,和之前讲的效果一样
set_names(c(1,3,5),c("a","b","c"))
#> a b c 
#> 1 3 5

(难度好像真的超标,硬着头皮继续)
捋一下:
class控制泛型函数的运行方式
泛型函数允许根据不同类型的输入而进行不同的操作
那么字面翻译,泛型指的是多种输入类型。
7.扩展向量
(1)因子
[AppleScript] 纯文本查看 复制代码
x <- factor(c("ab", "cd", "ab"), levels = c("ab", "cd", "ef"))
typeof(x)
#> [1] "integer"
class(x) #曾以为class和typeof一样,看来是错了。
#> [1] "factor"
attributes(x)#不仅能展示levels还能展示class
#> $levels
#> [1] "ab" "cd" "ef"
#> 
#> $class
#> [1] "factor"

看到时间就跳过,暗爽。
(3)tibble
tibble 是扩展的列表,有 3 个class: tbl_df、 tbl 和 data.frame。它的特性有 2 个:(列)
names 和 row.names。
[AppleScript] 纯文本查看 复制代码
tb <- tibble::tibble(x = 1:5, y = 5:1)
typeof(tb)
#> [1] "list"

关于tibble和data.frame
[AppleScript] 纯文本查看 复制代码
tb <- tibble::tibble(x = 1:5, y = 5:1)
typeof(tb)
#> [1] "list"
attributes(tb)
#> $names
#> [1] "x" "y"
#> 
#> $row.names
#> [1] 1 2 3 4 5
#> 
#> $class
#> [1] "tbl_df"     "tbl"        "data.frame"

df <- data.frame(x = 1:5, y = 5:1)
typeof(df)
#> [1] "list"
attributes(df)
#> $names
#> [1] "x" "y"
#> 
#> $class
#> [1] "data.frame"
#> 
#> $row.names
#> [1] 1 2 3 4 5

主要区别就是class!tibble里包含了data.frame。



上一篇:R for Data Science-016 使用readr包进行数据导入
下一篇:小洁详解《R数据科学》--第十六章 purrr(上)
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-4-24 09:18 , Processed in 0.030718 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.