R语言学习笔记:向量
向量是R语言最基本的数据类型。
单个数值(标量)其实没有单独的数据类型,它只不过是只有一个元素的向量。
x <- c(1, 2, 4, 9)
x <- c(x[1:3], 88, x[4]) #在最后一个数前面插入一个数值88,可以看到用x[4]可以取出第4个元素,用x[1:3]可以取出前3个元素
typeof(x) #查看向量里的元素的类型,注意默认是double。[1] "double"
mode(x) #r语言中变量类型称为模式(mode)。[1] "numeric"
length(x) #获取向量的长度
R不需要提前申明变量,大小写敏感,数组是从1开始。
冒号运算符
1:4 #R是一种函数式语言,冒号也是一种运算符(实际上这是一种中置运算符的表示法),可以产生序列。[1] 1 2 3 4
":"(1, 4) #与1:4是等价的,用引号引起来,就是一种函数名了,不过这种写法看上去比1:4怪异多了
5:1 #结果:[1] 5 4 3 2 1
1:10 - 1 #冒号的优先级比加减运算要高,实际上就是(1:10) - 1,结果: [1] 0 1 2 3 4 5 6 7 8 9
1:(10-1) #结果:[1] 1 2 3 4 5 6 7 8 9
循环补齐recycle
这种特性在其它语言中以前还没有看见过!超强的向量运算功能!
y <- c(1,2,3) + 4 # 单个的数值4会被补齐为c(4,4,4),最后结果为c(5,6,7)
c(1,2,3) * c(4,5,6) # 结果:[1] 4 10 18,这里表示的两个向量中的元素分别相乘,如果想求向量的点积(dot prod),就需要用这个%*%函数了
c(1,2,3) %*% c(4,5,6) #结果是一个1x1的矩阵,其中只有一个元素14
c(1,2,3) * c(4,5,6,7) #结果:[1] 4 10 18 7。同时给出警告信息:长的对象长度不是短的对象长度的整倍数
取模运算%%
c(7,8,9) %% 3 #结果:[1] 1 2 0
向量索引
普通的语言中索引只能是正整数,但这里的索引可以是向量,还可以是负数。严格说来这不能叫索引,而是筛选操作,看后面的filtering
x <- c(1,3,5,7,9)
x[2] #结果:[1] 3
x[c(5,4,3,2,1)] #结果为:[1] 9 7 5 3 1
x[sample(1:5)] #把1,3,5,7,9乱序排列,每次运行你会得到一个不同的结果
x[-1] #[1] 3 5 7 9,把第一个元素除掉,这是我非常喜欢的语法特性!
x[1:3] #结果:[1] 1 3 5
seq()创建向量
seq(from=12, to=30, by=3) # 也可以写成: seq(12,30,3)
[1] 12 15 18 21 24 27 30
seq(from=1.1, to=2, length=10)
[1] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
x <- c(1,2,4,8)
seq(x)
[1] 1 2 3 4
seq(1,5)与1:5是一个意思
rep重复向量常数
rep(8, 4)
[1] 8 8 8 8
rep(1:3, 2)
[1] 1 2 3 1 2 3
rep(1:3, each=2)
[1] 1 1 2 2 3 3
all()和any()
x<-(1:10)
any(x>8) #只要向量中有一个大于8,就返回真
[1] TRUE
all(x>8) #所有都大于8,才返回真
[1] FALSE
向量化
w <- function(x) return (x+1) #加号运算符支持向量,所以自定义的函数w也是向量化的!看上去简单的x+1,但我们已经写出了一个向量函数
w(1) #这是我们最熟悉的函数调用
[1] 2
w(c(1,3,5)) #可以对向量进行运算
[1] 2 4 6
NA与NULL
在统计过程中,经常会遇到缺失值,称为NA,即Not Available。
R语言中许多函数可以忽略NA值。
> x <- c(1,2,NA,4)
> mean(x) #有缺失值,无法计算平均值
[1] NA
> mean(x, na.rm=TRUE) #忽略NA值
[1] 2.333333
> mean(c(1,2,NULL,4)) # NULL值会自动略过
[1] 2.333333
> length(c(1,2,NA,4)) #统计个数时NA被计算在内
[1] 4
> length(c(1,2,NULL,4))
[1] 3
筛选filtering
有点像索引,因为也是放在[]里,可以把满足一定条件的元素取出来。
> z <- 1:10
> z
[1] 1 2 3 4 5 6 7 8 9 10
> z[z%%2==0]
[1] 2 4 6 8 10
> z%%2 #取模
[1] 1 0 1 0 1 0 1 0 1 0
> z%%2==0 #注意这里的0被自动循环补齐
[1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
> x<-c(1,3,5,6,9)
> x[x>3] <- 0 #把大于3的数值都置为0
> x
[1] 1 3 0 0 0
subset也是筛选,区别在于处理NA的方式上
> x<-c(1,2,NA,4,5)
> x[x>3]
[1] NA 4 5
> subset(x, x>3) #自动把NA剔除掉了
[1] 4 5
which()可以找到满足条件的元素的位置
> x <- c(5, 2, -3, 9, 1)
> x[x*x>8]
[1] 5 -3 9
> which(x*x>8)
[1] 1 3 4
向量化的ifelse()
> x <- c(5, 2, -3, 9, 1)
> ifelse(x>3, 2*x, 3*x)
[1] 10 6 -9 18 3
判断向量是否相等
> x <- 1:3
> y <- c(1,3,4)
> all(x==y)
[1] FALSE
> identical(x,y)
[1] FALSE
注意1:3是整数,c(1,2,3)是浮点数,它们不相等:
> identical(1:3, c(1,2,3))
[1] FALSE
> typeof(1:3)
[1] "integer"
> typeof(c(1,2,3))
[1] "double"
给向量元素命名names()
> workdays <- 1:5
> names(workdays) <- c("mon", "tue", "wed", "thu", "fri")
> workdays
mon tue wed thu fri
1 2 3 4 5
可以用名称来引用元素
> workdays["wed"]
wed
3
R语言学习笔记:向量的更多相关文章
- R语言学习笔记:小试R环境
买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...
- R语言学习笔记:基础知识
1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- R语言学习笔记(二)
今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars<-c("mpg","hp","wt") &g ...
- R语言学习笔记(一)
1.不同的行业对数据集(即表格)的行和列称谓不同,统计学家称其为观测(observation)和变量(variable): 2.R语言存储数据的结构: ①向量:类似于C语言里的一位数组,执行组合功能的 ...
- R语言学习笔记
向量化的函数 向量化的函数 ifelse/which/where/any/all/cumsum/cumprod/对于矩阵而言,可以使用rowSums/colSums.对于“穷举所有组合问题" ...
- R语言学习笔记:因子
R语言中的因子就是factor,用来表示分类变量(categorical variables),这类变量不能用来计算而只能用来分类或者计数. 可以排序的因子称为有序因子(ordered factor) ...
- R语言学习笔记:字符串处理
想在R语言中生成一个图形文件的文件名,前缀是fitbit,后面跟上月份,再加上".jpg",先不百度,试了试其它语言的类似语法,没一个可行的: C#中:"fitbit&q ...
- R语言学习笔记:向量化
R语言最强大的方面之一就是函数的向量化,这些函数可以直接对向量的每个元素进行操作.例如: 对每个元素进行开方 > v<-c(4,3,8,16,7.3) > v [1] 4.0 3 ...
随机推荐
- [CS231n-CNN] Training Neural Networks Part 1 : parameter updates, ensembles, dropout
课程主页:http://cs231n.stanford.edu/ ___________________________________________________________________ ...
- java攻城狮之路(Android篇)--widget_webview_metadata_popupwindow_tabhost_分页加载数据_菜单
一.widget:桌面小控件1 写一个类extends AppWidgetProvider 2 在清单文件件中注册: <receiver android:name=".ExampleA ...
- 修改efi分区
换了ssd硬盘,速度真快! 我特意准备了一个efi分区(fat32,忘记指定efi了),然而win10安装时不能指定启动位置,自己创建了一块. 下面我们把让win10使用自己创建的efi分区. 以管理 ...
- 高性能JavaScript-JS脚本加载与执行对性能的影响
在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 脚本位置对性能的影响 优化页面加载性能的原则之一是将scri ...
- 受限玻尔兹曼机(RBM)学习笔记(一)预备知识
去年 6 月份写的博文<Yusuke Sugomori 的 C 语言 Deep Learning 程序解读>是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原 ...
- Flatic – 超齐全的 Web 元素界面素材库免费下载
Flatic 是一个庞大的用户界面工具包,包含数以百计的网页元素,这将有助于你在 Photoshop 中轻松设计整个网站.成套的图标和动作都已包含在套件中.该素材包包括超过100个 PSD 元素.您可 ...
- 开放产品开发(OPD):开篇
OPD?这是什么玩意?google一下.忘记说了,最近google被封锁的厉害,那就百度一下吧.可惜,OPD找不出是什么.你今天你找不到是正常的,因为之前还没有OPD,而现在才开始有OPD这个东东.相 ...
- Android下拉刷新底部操作栏的隐藏问题
最近自己编写下拉刷新的时候,发现了一个问题,就是有一个需求是这样的:要求页面中是一个Tab切换界面,一个界面有底部操作栏,不可下拉刷新,另一个界面没有底部操作栏,但可以下拉刷新. 按照平常的做法,我在 ...
- 让 ASP.NET JS验证和服务端的 双验证 更简单
只用JavaScript验证安全不安全谁都知道,答案是不安全,非常的不安全.因为在客户端进行的验证相当于“让用户自己验证自己”,很明显是不靠谱的.你不能避免一些恶意用户人为的修改自己的表单进行欺骗,也 ...
- 数据库中触发器before与after认识
Before与After区别: before:(insert.update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据. 对于INSERT语句, 只有NEW是合法的 ...