《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框
一、第二章 科学计算器
要检查两个数字是否一样,要使用 all.equal() ,不要使用 == ,== 符号仅用于比较两个整型数是否存在相同 。
> all.equal(sqrt(2)^2,2)
[1] TRUE
> all.equal(sqrt(2) ^ 2,3)
[1] "Mean relative difference: 0.5"
> isTRUE(all.equal(sqrt(2) ^ 2,2))
[1] TRUE
> isTRUE(all.equal(sqrt(2) ^ 2,3))
[1] FALSE
二、第三章 检查变量和工作区
变量的类:逻辑类(logical)、三个数值的类(numeric、complex、integer)、用于存储文本的字符character、存储类别数据的因子factor,以及较罕见的存储二进制数据的原始值raw
factor因子,存储类别数据
> gender = factor(c("male","female","male","female"))
> gender
[1] male female male female
Levels: female male
> levels(gender)
[1] "female" "male"
> nlevels(gender)
[1] 2
在底层,因子的值被存储为整数,而非字符。可以通过调用 as.integer() 清楚的看到
> as.integer(gender)
[1] 2 1 2 1
事实证明,采用整数而非字符文本的存储方式,令内存的使用非常高效
> gender_char = sample(c("female","male"),1000,replace = TRUE)
> gender_char
...... > gender_fac = as.factor(gender_char)
> #把数据的类型转换为因子型
> object.size(gender_char)#object.size()函数返回对象的内存大小
8160 bytes
> object.size(gender_fac)
4560 bytes
把因子转换为字符串
> as.character(gender)
[1] "male" "female" "male" "female"
改变一个对象的类型(转型casting)
> x = "123.456" #使用as*函数改变x的类型
> as.numeric(x) #as(x,"numeric")
[1] 123.456
> is.numeric(x)
[1] FALSE
代码 options(digits = n) 设置全局变量确定打印数字的小数点位数。
> options(digits = 10)
> (x = runif(5))
[1] 0.040052175522 0.544388080016 0.506369658280
[4] 0.144690239336 0.005838404642
runif 函数将生成30个均匀分布于0和1之间的随机数,summary 函数就不同的数据类型提供汇总信息,例如对数值变量:
> num = runif(30)
> summary(num)
Min. 1st Qu. Median Mean
0.001235794 0.199856233 0.475356185 0.475318138
3rd Qu. Max.
0.703412558 0.984893506
letters、LETTERS 是两个内置的常数
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l"
[13] "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x"
[25] "y" "z"
> LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L"
[13] "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X"
[25] "Y" "Z"
sample 函数为抽样函数,它的格式为:sample( x , size= , replace= ) 第三个参数的缺省值是F ,表示进行的是无放回抽样。
对a~e重复随机抽样30次:
> fac = factor(sample(letters[1:5],size = 30,replace = T))
> summary(fac)
a b c d e
4 7 2 5 12
> bool = sample(c(TRUE,FALSE,NA),30,replace = TRUE)
> summary(bool)
Mode FALSE TRUE NA's
logical 10 8 12
创建数据框dfr ,这里只显示他的前几行
> dfr = data.frame(num,fac,bool)
> head(dfr) #默认显示前6行
num fac bool
1 0.34019507235 b NA
2 0.77415443189 e TRUE
3 0.02201034524 d TRUE
4 0.11190012516 e NA
5 0.18030911358 a NA
6 0.98489350639 d TRUE
> summary(dfr)
num fac bool
Min. :0.001235794 a: 4 Mode :logical
1st Qu.:0.199856233 b: 7 FALSE:10
Median :0.475356185 c: 2 TRUE :8
Mean :0.475318138 d: 5 NA's :12
3rd Qu.:0.703412558 e:12
Max. :0.984893506
str 函数能显示对象的结构。对向量来说,它并非很有趣(因为它们太简单了),但 str 对数据框和嵌套列表非常有用:
> str(num)
num [1:30] 0.34 0.774 0.022 0.112 0.18 ...
> str(dfr)
'data.frame': 30 obs. of 3 variables:
$ num : num 0.34 0.774 0.022 0.112 0.18 ...
$ fac : Factor w/ 5 levels "a","b","c","d",..: 2 5 4 5 1 4 1 4 1 5 ...
$ bool: logi NA TRUE TRUE NA NA TRUE ...
每个类都有自己的打印(print)方法,以此控制如何显示到控制台。又是,这种打印模糊了其内部结构,或忽略了一些有用的信息。用unclass函数可绕开这一点,显示变量是如何构建的。例如,对因子调用 unclass 函数会显示它仅是一个整数(integer) 向量,拥有一个叫 levels 的属性:
unclass(fac)
[1] 2 1 4 3
attr(,"levels")
[1] "cat" "dog" "goldfish" "hamster"
attributes 函数能显示当前对象的所有属性列表:
> attributes(fac)
$levels
[1] "cat" "dog" "goldfish" "hamster" $class
[1] "factor"
view 函数会把数据框显示为电子表格。edit 和 fix 与其相似,不过它们允许手动更改数据值。
View(dfr) #不允许更改
new_dfr = edit(dfr) #更改将保存于new_dfr
fix(dfr) #更改将保存于dfr
View(head(dfr,50)) #查看前50行
三、第四章 向量、矩阵和数组
数组能存放多维矩形数据。矩阵是二维数组的特例。
有很多创建序列的方法,seq创建的优点是可设置步长。
> (xulie = seq(1,15,2))
[1] 1 3 5 7 9 11 13 15
length() 函数查询序列的长度:
> length(xulie)
[1] 8
向量的命名:
> c(apple = 1,banana = 2,"kiwi fruit" = 3, 4)
apple banana kiwi fruit
1 2 3 4
> x = 1:4
> names(x) = c("apple" ,"banana" ,"kiwi fruit","")
> x
apple banana kiwi fruit
1 2 3 4
数组的创建:
> three_d_array = array( #三维数组
+ 1:24,
+ dim = c(4,3,2),
+ dimnames = list(
+ c("one","two","three","four"),
+ c("ein","zwei","drei"),
+ c("un","deux")
+ )
+ )
> three_d_array
, , un ein zwei drei
one 1 5 9
two 2 6 10
three 3 7 11
four 4 8 12 , , deux ein zwei drei
one 13 17 21
two 14 18 22
three 15 19 23
four 16 20 24
> (a_matrix = matrix( #创建矩阵
+ 1:12,
+ nrow = 4,byrow = T,
+ dimnames = list(
+ c("one","two","three","four"),
+ c("ein","zwei","drei")
+ )
+ ))
ein zwei drei
one 1 2 3
two 4 5 6
three 7 8 9
four 10 11 12
一些函数:
> x = (1:5) ^ 2
> x
[1] 1 4 9 16 25
> x[c(1,3,5)]
[1] 1 9 25
> x[c(-2,-4)]
[1] 1 9 25
> x[c(TRUE,F,T,F,T)]
[1] 1 9 25
> names(x) = c("one","four","nine","sixteen","twenty five")
> x
one four nine sixteen twenty five
1 4 9 16 25
> which(x > 10)
sixteen twenty five
4 5
> which.min(x)
one
1
> which.max(x)
twenty five
5
>
> rep(1:5 , 3)
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
> rep(1:5 , each = 3)
[1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
> rep(1:5 , times = 1:5)
[1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
> rep(1:5 , length.out = 7)
[1] 1 2 3 4 5 1 2
> rep.int(1:5 , 3)
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
> rep_len(1:5 , 13)
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3
> dim(three_d_array)
[1] 4 3 2
> dim(a_matrix)
[1] 4 3
> nrow(a_matrix)
[1] 4
> ncol(a_matrix)
[1] 3
第五章 列表和数据框
#创建一个列表
> (main_list = list(
+ element_in_main_list = log10(1:10),
+ middle_list = list(
+ element_in_middle_list = diag(3),
+ inner_list = list(
+ element_in_inner_list = pi ^ 1:4,
+ another_element_in_inner_list = "a"
+ )
+ )
+ ))
$element_in_main_list
[1] 0.0000000 0.3010300 0.4771213 0.6020600 0.6989700 0.7781513
[7] 0.8450980 0.9030900 0.9542425 1.0000000 $middle_list
$middle_list$element_in_middle_list
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1 $middle_list$inner_list
$middle_list$inner_list$element_in_inner_list
[1] 3.141593 $middle_list$inner_list$another_element_in_inner_list
[1] "a"
对列表进行查询
(uk_bank_holidays_2013 <-list(
Jan = "New Year's Day",
Feb = NULL,
Mar = "Good Friday",
Apr = "Easter Monday",
May = c("Early May Bank Holiday","Spring Bank Holiday"),
Jun = NULL,
Jul = NULL,
Aug = "Summer Bank Holiday",
Sep = NULL,
Oct = NULL,
Nov = NULL,
Dec = c("Chrismas Day","Boxing Day")
)) #假如创建列表时并没有给各元素命名,可在最后利用names()对列表命名。names(uk_bank_holidays_2013) = month.abb;
> uk_bank_holidays_2013["Jan"] #各种查询方式
$Jan
[1] "New Year's Day" > uk_bank_holidays_2013[["Jan"]]
[1] "New Year's Day"
> uk_bank_holidays_2013$Jan
[1] "New Year's Day"
> uk_bank_holidays_2013[1]
$Jan
[1] "New Year's Day" > uk_bank_holidays_2013[[1]]
[1] "New Year's Day"
> uk_bank_holidays_2013[[c(5,2)]] #各种查询方式
[1] "Spring Bank Holiday"
> uk_bank_holidays_2013[[5]][[2]]
[1] "Spring Bank Holiday"
> uk_bank_holidays_2013$May
[1] "Early May Bank Holiday" "Spring Bank Holiday"
> uk_bank_holidays_2013$May[2]
[1] "Spring Bank Holiday"
> uk_bank_holidays_2013$Jan = NULL #删去元素操作
> uk_bank_holidays_2013$Feb = NULL
> uk_bank_holidays_2013["Aug"] = list(NULL) #将元素设置为NULL值
> uk_bank_holidays_2013
$Mar
[1] "Good Friday" $Apr
[1] "Easter Monday" $May
[1] "Early May Bank Holiday" "Spring Bank Holiday" $Jun
NULL $Jul
NULL $Aug
NULL $Sep
NULL $Oct
NULL $Nov
NULL $Dec
[1] "Chrismas Day" "Boxing Day"
创建数据框:
> (a_data_frame = data.frame( #创建一个数据框
+ x = letters[1:5],
+ y = rnorm(5),
+ z = runif(5) > 0.5
+ row.names = NULL #如果输入的任何变量有名称,那么行名称就取自第一
+ )) #个向量名称,该语句可将此规则覆盖掉
x y z
1 a 0.3067414 FALSE
2 b -2.4637065 TRUE
3 c 0.8443321 TRUE
4 d -0.0163287 TRUE
5 e 0.8291859 TRUE
注意,每列的类型可与其他列不同,但在同一列中的元素类型必须相同。还要注意的是,对象的类名是 data.frame ,中间有一个点,而非空字符。
第五章介绍了列表与数据框,操作数据框是一个很大的话题,13章会讨论。
《学习R》笔记:科学计算器、检查变量和工作区、向量、矩阵和数组、列表和数据框的更多相关文章
- R语言学习笔记(六): 列表及数据框的访问
List R语言中各组件的名称叫做标签(tags),访问列表有3种方法: j$salary 通过标签名字访问,只要不引起歧义,可以只写出前几个字母. j[['sal']] 夹在两个中括号时引号里的标签 ...
- 学习Python笔记---变量和简单数据类型
首先声明,这个是个人在自学的一些笔记,因为是小白,刚接触Python,之前也没有过类似的经验,所以很多东西对于其他人来说可能是小白级别的,写出来没有其他的意思就是自己整理然后记录一下,顺便分享出来,而 ...
- go 学习笔记(2) --变量、常量、iota、数组
参考网址:https://gobyexample.com 变量 Go中使用全新的关键字var来声明变量.var我们并不陌生,在Javascript 和C#中均有出现.不同的是Go和C#中变量属于强类型 ...
- 【零基础入门学习Python笔记013】元祖:戴上了枷锁的列表
元组:戴上了枷锁的列表 因为和列表是近亲关系.所以元祖和列表在实际使用上是很相似的. 本节主要通过讨论元素和列表究竟有什么不同学习元祖. 元组是不可改变元素的.插入.删除或者排序都不能够.列表能够随意 ...
- 《学习R》
<学习R> 基本信息 原书名:Learning R 原出版社: O'Reilly Media 作者: (美)Richard Cotton 译者: 刘军 丛书名: 图灵程序设计丛书 出版社: ...
- 【R笔记】R语言函数总结
R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字 ...
- R语言学习4:函数,流程控制,数据框重塑
本系列是一个新的系列,在此系列中,我将和大家共同学习R语言.由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成. 参考教材:<R语言实战>第二版(Robert I.Kaba ...
- go 学习笔记之有意思的变量和不安分的常量
首先希望学习 Go 语言的爱好者至少拥有其他语言的编程经验,如果是完全零基础的小白用户,本教程可能并不适合阅读或尝试阅读看看,系列笔记的目标是站在其他语言的角度学习新的语言,理解 Go 语言,进而写出 ...
- python视频学习笔记5(高级变量的类型)
知识点回顾: Python 中数据类型可以分为 **数字型** 和 **非数字型*** 数字型 * 整型 (`int`) * 浮点型(`float`) * 布尔型(`bool`) * 真 `True` ...
随机推荐
- yii 框架 – 安全站点和非安全站点的 URL 管理
在本文中我将描述怎么管理安全站点和非安全站点的 URL 管理. 安全站点的内容使用httpsSSL (安全套接字层) 协议发送,而非安全站点使用http协议.为了描述简单,我们称前者https内容/页 ...
- Go 开发者平均年薪 46 万?爬数据展示国内 Go 的市场行情到底如何
随着云原生时代的到来,拥有高并发性.语法易学等特点的 Golang 地位逐渐凸显,在云原生编程中占据了主导地位.在近期出炉的 TIOBE 10 月编程语言排行榜中,Golang 从前一个月的 16 位 ...
- 解决在高分屏下开发winform界面变形
Form.AutoScaleMode = AutoScaleMode.None; 需要在超大屏下显示的时候,再考虑 AutoScaleMode.Font; AutoScaleMode.Dpi;
- Eclipse传递main函数参数
在项目上右击 Run As->Run Configurations...->Arguments->在Program arguments:的文本框中输入你要传入的参数,若有几个参数则在 ...
- 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告
实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...
- Mp3下载
- nginx 安装部署前篇
官网:https://nginx.org/ 特性:既可以作为HTTP服务器,也可以作为反向代理服务器或者邮件服务器或者邮件服务器:能够快递响应静态页面的请求:支持 Fast CGI.SSL.Virtu ...
- [Codeforces #615 div3]1294E Obtain a Permutation
Before the Beginniing 本文为 Clouder 原创文章,原文链接为Click,转载时请将本段放在文章开头显眼处.如进行了二次创作,请明确标明. 由本人转载于博客园. 题意分析 C ...
- 隐患写法flag.equals("true")带来的空指针异常
分类:2008-06-04 12:47 467人阅读 评论(0) 收藏 举报 linuxjava测试 昨天,有同事A对同事B写的程序进行测试时,出现错误,看控制台信息,发现抛出了空指针异常. 调查结果 ...
- 全面理解Java中的String数据类型
1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...