R 学习笔记(1) -- 向量

向量是 R 最基本的变量

R 中变量的类型称为模式。

R 中最基本的变量类型是向量,一维的向量,没有标量,任何一个看似标量的变量其实都是长度为 1 的向量。

R 中同一向量中元素类型必须相同,例如整型,浮点型,字符型,布尔型。

R 中向量是连续存储的,因此不能插入或者删除,如果要实现插入或删除必须为向量重新赋值。

R 中向量进行运算时,会自动进行循环补齐,短向量循环补齐到长向量的长度再进行运算。

R 中的矩阵实际是一个长向量。


> x <- c(1,2,3)

> x

[1] 1 2 3

> x + 1

[1] 2 3 4

> # 实际运行的是 (1,2,3) + (1,1,1)

许多 R 的内置函数在对变量进行运算时,也是向量化运算,即对向量的每一个元素进行函数运算。


seq 函数

比 : 更常用的是 seq(from, to, by) 函数 (sequence),来生成等差序列:


> seq(1,10)

[1] 1 2 3 4 5 6 7 8 9 10

> seq(from=1,to=10,by=2)

[1] 1 3 5 7 9

> seq(1,10,3)

[1] 1 4 7 10


rep 函数

rep (指repeat) 函数形式,rep(x,times) 创建重复 times*length(x) 个元素的向量,把 x 重复 times 次。


> rep(8,4)

[1] 8 8 8 8

> rep(c(1,2,3),3)

[1] 1 2 3 1 2 3 1 2 3

> rep(1:3,3)

[1] 1 2 3 1 2 3 1 2 3

> # rep 函数还有一个 each 参数,与 times 不同,each 指定 x 交叉重复的次数

> rep(c(1,2,3),each=2)

[1] 1 1 2 2 3 3

> rep(c(1,2,3),each=3)

[1] 1 1 1 2 2 2 3 3 3


NULL

NULL 是 R 的一种特殊对象,没有模式,没有长度,为空。对向量某个元素赋值为 NULL 可以删除该元素。


筛选

筛选是 R 中最常用的运算之一。


> z <- c(5,2,-3,8)

> w <- z[z*z > 8]

> w

[1] 5 -3 8

> z

[1] 5 2 -3 8

> z*z

[1] 25 4 9 64

> # 实际运算是(25,4,9,64) > (8,8,8,8),结果也是一个四元向量,值为布尔型

> z*z > 8

[1] TRUE FALSE TRUE TRUE

> z[c(TRUE,FALSE,TRUE,TRUE)]

[1] 5 -3 8


ifelse()

向量化的 ifelse() 函数, ifelse(b,u,v), b 是布尔型向量,u,v 都是向量。


> x <- c(5,2,9,12)

> ifelse(x > 6, 2*x, 3*x)

[1] 15 6 18 24

> # 效果相当于 ifelse(c(FALSE,FALSE,TRUE,TRUE),c(10,4,18,24),c(15,6,27,36)),但实际 R 使用“惰性求值”,只有在需要时表达式才会计算,否则不计算。

相对于标准的 if-then-else 结构,ifelse() 是向量化语句,因此有可能快很多。


测试向量相等

不能直接用 ==,因为 == 是一个向量化运算,可以结合 all() 函数。


> x <- 1:3

> y <- c(1,3,4)

> x == y

[1] TRUE FALSE FALSE

> all(x==y)

[1] FALSE

可以简单地使用 identical() 函数。


> identical(x,y)

[1] FALSE

identical() 是判断两个向量是否完全相同,包括类型是否相同。使用 identical() 要小心,看如下例子:


> x <- 1:3

> y <- c(1,2,3)

> identical(x,y)

[1] FALSE

> # 符号 : 产生的是整数,而 c() 产生的是浮点数

> typeof(x)

[1] "integer"

> typeof(y)

[1] "double"

连接函数 c()

如果传递到 c() 中的数据具有不同类型,则它们将被降级为同一类型,该类型最大限度地保留它们的共同特性。


> c(5,2,'abc')

[1] "5" "2" "abc"

> c(5,2,list(a=1,b=4))

[[1]]

[1] 5

[[2]]

[1] 2

$a

[1] 1

$b

[1] 4

与 Python 不同,c() 函数对向量有扁平化的效果。


> c(5,2,c(1.5,6))

[1] 5.0 2.0 1.5 6.0


奇怪的东西

在谢益辉主笔的《R语言忍者秘笈》中看到几个例子,由于计算机存储数据精度的问题,有些运算会出现莫名其妙的结果:

> x <- seq(0,1,0.1)
> x
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> y <- c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)
> y
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> x == y
 [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE
> 0.3 - 0.7 + 0.4 == 0
[1] FALSE
> sqrt(2)^2 == 2
[1] FALSE

具有新想法的人在其想法实现之前是个怪人。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容

  • 在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台...
    果果哥哥BBQ阅读 5,827评论 0 8
  • 一、基础 R是一种语法非常简单的表达式语言(expression language),大小写敏感。 可以在R环境下...
    多了去的YangXuLei阅读 2,181评论 1 3
  • 《R语言入门》的读书笔记 本书的重点内容及感悟: 第一章 导言 1、R是一个有着统计分析功能及强大作图功能的软件系...
    格式化_001阅读 12,593评论 0 9
  • 周五去了职高趣味运动会 下午学府听课 周四学府机房检查 下午新合三源开车去 周三毕浦片区4校 周二横村三校 周一给...
    由里世界阅读 364评论 0 0
  • 注:本笔记来自安全牛课堂,感谢倪群主,感谢苑老师! 补充:最后的一个工具非常强大!可以多学几次。 类似WCE的工具...
    FKTX阅读 253评论 0 0