《学习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","")
> xapple     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
, , unein zwei drei
one     1    5    9
two     2    6   10
three   3    7   11
four    4    8   12, , deuxein 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")
> xone        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章会讨论。

 

转载于:https://www.cnblogs.com/jiaxinwei/p/11483133.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE 解决:Method “xxx“ has already been defined as a data property.

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.调用方法报错&#xff1a; Method "changePage" has already been defined as a data property. 代码写法&#xff1a; 2…

尽早理财的8个思维

理财并不单纯的是指通过技巧加经验去让自己手里的钱变成更多的钱&#xff0c;还包括一种思维方式。一个真正的理财高手&#xff0c;思维模式和他人不同。这些人好像天生为了赚钱而生&#xff0c;但我们在羡慕的同时可以将他们的思维拿来借鉴&#xff0c;培养适合自己的理财思维…

解决:java.lang.NoSuchMethodException: gentle.entity.User.<init>()

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 运行程序报错&#xff1a; java.lang.NoSuchMethodException: gentle.entity.User.<init>() 2. 原因和解决&#xff1a; 我…

【转】R函数-diag()函数

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/lili_wuwu/article/details/51909229 diag()提取或替换一个矩阵的对角线,或构造一个对角矩阵。 语法&…

赚钱的8大定律

赚钱一定有方法&#xff0c;每个人有志于创业的人都应该分析一下&#xff0c;什么生意你最适合做&#xff0c;什么事情你最擅长&#xff0c;自然就是你容易收获的。 8条赚钱定律&#xff1a; 赚钱第一定律&#xff1a;你要做羊&#xff0c;还是做狼&#xff1f; 永远是10%的人…

C# 模拟Windows键盘事件

发送键盘消息 1 [DllImport("user32.dll", EntryPoint "keybd_event", SetLastError true)] 2 public static extern void keybd_event( 3 byte bVk, //虚拟键值 4 byte bScan,// 一般为0 5 int…

js 验证用户输入的是否为数字、检查只能为数字

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方法一 如果判断输入的是否是数字&#xff0c;如果不是数字弹出一个提示&#xff1a;简易代码如下&#xff1a;<body> <input …

修炼你自己

一、保持沉稳&#xff08;1&#xff09;不要随便显露你的情绪。&#xff08;2&#xff09;不要逢人就诉说你的困难和遭遇。&#xff08;3&#xff09;在征询别人的意见之前&#xff0c;自己先思考&#xff0c;但不要先讲。&#xff08;4&#xff09;不要一有机会就唠叨你的不满…

C# 动态加载资源

在xaml中控件通过绑定静态资源StaticResource来获取样式Style有多种方式&#xff0c;TextBlockStyle.xaml是一个ResourceDictionary&#xff0c;包含了所需样式 通过相对路径引用 通过后台代码向当前程序的资源中动态添加&#xff0c;代码如下&#xff1a; 1 ResourceDicti…

中医3个不花钱的养肾方

深呼吸可通过肺肾的相互作用&#xff0c;对肾起到温煦的效果。 肾为先天之本。如果先天不足&#xff0c;后天失养&#xff0c;就会出现肾精亏虚、肾阳虚衰、肾阴亏虚等证。男女老幼都可能肾虚&#xff1a;小儿肾虚&#xff0c;生长发育迟缓&#xff0c;智力低下;中青年肾虚&…

ACM-ICPC 2018 徐州赛区网络预赛 I. query 树状数组

I. query 题目链接&#xff1a; Problem Description Given a permutation \(p\) of length \(n\), you are asked to answer \(m\) queries, each query can be represented as a pair \((l ,r )\), you need to find the number of pair \((i ,j)\) such that \(l \le i <…

内容分发网络(CDN) 是什么

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 技术原理解说见另一文&#xff1a;https://blog.csdn.net/jiangyu1013/article/details/88795690 内容分发网络 &#xff08;英语&…

7种方法让你养出干净的肺

世界卫生组织(WHO)近日公布的全球1081个城市采集的空气质量数据显示&#xff0c;空气中可吸入颗粒物(PM10)含量最少的前50个城市几乎被加拿大和美国包揽。中国北京&#xff0c;兰州等城市都是重灾区。生活在很多大中型城市&#xff0c;除了空气污染外&#xff0c;香烟、油烟、工…

CDN 的作用与基本过程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 技术原理解说也可参见另一文&#xff1a;https://blog.csdn.net/jiangyu1013/article/details/88795690 1.简介 CDN&#xff0c;Content …

2019南昌网络赛  I. Yukino With Subinterval 树状数组套线段树

I. Yukino With Subinterval题目链接&#xff1a; Problem Descripe Yukino has an array \(a_1, a_2 \cdots a_n\). As a tsundere girl, Yukino is fond of studying subinterval. Today, she gives you four integers $l, r, x, y $, and she is looking for how many diffe…

健康丨汗从哪里出 病从哪里来

1.额头出汗肝阳上亢如果额头常常出很多汗&#xff0c;中医认为可能是肝阳上亢引起的。建议你去医院检查一下甲状腺激素分泌是否正常&#xff0c;因为这很可能是甲状腺激素分泌过剩造成的。  医师建议&#xff1a;平时尽量保持心境平和&#xff0c;少生气&#xff0c;女人尤其…

CDN(内容分发网络)技术原理

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 前言 Internet的高速发展&#xff0c;给人们的工作和生活带来了极大的便利&#xff0c;对Internet的服务品质和访问速度要求越来越高…

3.0 go mod之远程仓库搭建-代码示例

注意事项 所谓的远程仓库指的是github&#xff0c;个人首次使用go mod在其他云仓库上尝试&#xff0c;并未成功&#xff0c;这浪费了我近2小时的时间&#xff1b; 如果你是初次尝试&#xff0c;那么除了github的地址换一下之外&#xff0c;其他的都按照示例操作&#xff0c;比如…

视界云:CDN{内容分发网络} 知识详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 CDN 全称:Content Delivery Network或Content Ddistribute Network&#xff0c;即内容分发网络 基本思路&#xff1a; 尽可能避开互联…

2019牛客多校第七场E Find the median 权值线段树+离散化

Find the median题目链接&#xff1a; https://ac.nowcoder.com/acm/contest/887/E 题目描述 Let median of some array be the number which would stand in the middle of this array if it was sorted beforehand. If the array has even length let median be smallest of …