8.2 喀迈拉(no.21~no.30)

8.2.21 is.matrix

is.matrix会造成惊喜,不仅因为在RS+中会返回不同的答案。

> is.matrix(1:3)
[1] FALSE
> is.matrix(array(1:3, c(3,1)))
[1] TRUE
> is.matrix(array(1:3, c(3,1,1)))
[1] FALSE
> is.matrix(array(1:3, 3))
[1] FALSE
> is.matrix(data.frame(1:3))
[1] FALSE # would be TRUE in S+
> is.matrix(t(1:3))
[1] TRUE

is.matrix中使用的"matrix"的定义是一个维度是2的数组。注意到函数t强制将一个非数组变为一个(列)矩阵然后进行转置。

一些人想要默认的矩阵。这是不可能的。R是一个一般对象的语言,不是一个矩阵语言。

8.2.22 maxpmax

我已不敢计算我遇到这种错误的次数了,或者我解决这种问题所花费的时间了。我仅仅思考总结在我非常清楚地知道maxpmax的区别(minpmin)之后的时间。

回想一下第三轮回中有两种意义的向量化。maxpmax是分别不同的两种。

  • max返回所有输入中最大的那个单独的数。
  • pmax返回一个对于输入中每个索引位置的最大的数的向量。

    > max(1:5, 6:2)
    [1] 6
    > pmax(1:5, 6:2)  # 相同位置的最大数
    [1] 6 5 4 4 5
    

"p"pmax中的意思就是并行的意思(parallel)。

8.2.23 all.equal返回令人惊讶的值

我们在第一轮回遇到了作为==的替代品的all.equal。数值错误造成"==" 很多情况下不会提供一个有用的结果。

if(all(x == y)) { # wrong if there is numerical error
if(all.equal(x, y)) { # WRONG, not FALSE when not equal
if(isTRUE(all.equal(x, y)) { # right

8.2.24 all.equal 并不相同

all.equal的目的是比较那些可能对它们来说有模糊的记录。有时all.equal所发现的模糊是让人惊讶的:

> all.equal(as.numeric(NA), 0/0)
[1] TRUE

The identical function allows for no fuzziness at all:
函数identical不会造成模糊:

> identical(as.numeric(NA), 0/0)
[1] FALSE

8.2.25 identical是真的真的相同

> xi <- 1:10
> yi <- 1:10
> identical(xi, yi[1:10])
[1] TRUE
> yi[11] <- 11
> identical(xi, yi[1:10])
[1] FALSE
> zi <- 1:10
> zi[11] <- 11L
> identical(xi, zi[1:10])
[1] TRUE

xi是以integer的形式存储。但是一旦yi被添加了一个double类型的值,它就以double的形式存储了。

正如早都说过的那样,你不太肯能需要知道数字是怎么被存储的。如果你认为除了特殊的情况之外为什么会有这样的问题,那么或许你应该找到答案。

尽管identical对于什么样的对象是相同的有着严格的要求,但是它也不至于坚持认为它们应该在内存中共享相同的位置。这基本上对R来讲是一个陌生的概念。

8.2.26 =不是<-的代名词

操作符"="在很多情况下和 "<-" 意味着相同的事情,但是有时也会不相同。
看看下边的代码:

foo(93, a = 47)

foo(93, a <- 47)

这两个命令会导致完全不同的结果。你不应该在给一个函数设置参数是使用"<-"

一个需要使用"<-"而不是"="的普遍情况是:

system.time(result <- my.test.function(100))

如果你在上边的命令中使用"="R会认为你在试着设置system.time中的result参数,而这个参数并不存在。(如果system.time不是你的常用函数,或许它应该是。)

标准建议是当你需要使用"<-"就避免使用"="即使这会让你多敲击一下键盘。无论如何,这是品味的问题(只要你知道它们的不同)。

8.2.27 复数算术

复数的优先权或许不是你期望的那样。看看:

> 1+3i - 3+5i
[1] -2+8i

8.2.28 复数不是数字

> is.numeric(1+3i)
[1] FALSE

复数也是数,但是在R的眼里不是numeric。为了在更广泛的意义上测试数字,你需要这样:

is.numeric(x) || is.complex(x)

8.2.29 非标准评估

有一些函数允许你输入对象的名字或者一个字符串类型的名字。比如:

help(subset)

使可以工作的,然而

help(’subset’)

才是真正有意义的。

做这个的函数意味着用于交互使用。允许有名字是有用的。如此的有用看起来好像是一个混合的祝福。很难讲节省网络时间的是去掉了两次键盘敲击还是之前造成的困惑。

如果这个命名的对象包含一个我们真的想要的字符串,一些函数给你想要的一些却不会。

foo <- ’subset’
help(foo) # gets help on subset
getAnywhere(foo) # finds foo, not subset
do.call(’getAnywhere’, list(foo)) # finds subset

一个非完全的对于参数没有标准评估的函数是:helprmsaveattachrequirelibrarysubsetreplicate

函数require 在参数character.only上有一个编程安全机智。

require(foo) # load package foo
require(foo, character.only=FALSE) # load package foo
require(foo, character.only=TRUE) # load package named by foo

library也是如此。

8.2.30 for的帮助

顺理成章地寻求for的帮助文档是这样的:

?for

这个并没有起作用。使用函数help似乎是一个不同的方式:

help(for)

替换如下(确保):

?’for’
help(’for’)

8.2 喀迈拉(no.21~no.30)相关推荐

  1. 8.2 喀迈拉(no.1~no.10)

    8.2 喀迈拉(no.1~no.10) 8.2.1 数字到因子到数字 一般情况下尽管因子不会涉及到数字,但是它们可以.在这种情况下,我们会有更多的困惑. > as.numeric(factor( ...

  2. 8.2 喀迈拉(no.31~no.40)

    8.2 喀迈拉(no.31~no.40) 8.2.31 subset 函数subset是为了在交互使用中提供便利.在函数中使用时却经常造成不便和困扰.在使用函数时,使用下标,不要使用subset. 病 ...

  3. 8.2 喀迈拉(no.11~no.20)

    8.2 喀迈拉(no.11~no.20) 8.2.11 is missing missing or missing?(翻译不了,自己意会吧) 在因子中缺失值当然是有意义的.完全有可能是我们不知道这个特 ...

  4. 8.2 喀迈拉(no.41~no.44)

    8.2 喀迈拉(no.41~no.44) 8.2.41 列明冲突 这是一个期望受挫的例子: > one.col.mat <- cbind(matname=letters[1:3]) > ...

  5. 新概念英语(第三册)复习(原文)——Lesson 21 - Lesson 30

    Lesson 21 - Daniel Mendoza Lesson 22 - By heart Lesson 23 - One man's meat is another man's poison L ...

  6. Dream City(01背包+小贪心)acm寒假集训日记21/12/30

    题目如下: AC代码如下: #include<iostream> #include<algorithm> #include<cstring> #include< ...

  7. 【笔试面经】21.12.30 疯狂游戏研发岗(C++)笔试

    疯狂游戏研发岗(C++)笔试,用时90min 编程题 矩阵转置 图片纵向翻转 问答题 编程题 一共两道编程题.第一次用牛客网考试的我,才知道编程是连获取输入输出方法都要自己写的,结果就从第一步开始就失 ...

  8. mysql 源码安装 5.6.21_Mysql5.6.21源码安装

    做了3年运维,个人笔记倒是挺多,没有好好整理,有分享精神,比较懒,大学注册的账号,但是一直没有写过任何技术文档,羞愧.很认同一句话,搞技术一定要有分享精神. 环境描述 安装包:mysql-5.6.21 ...

  9. Mysql5.6.21源码安装

    做了3年运维,个人笔记倒是挺多,没有好好整理,有分享精神,比较懒,大学注册的账号,但是一直没有写过任何技术文档,羞愧.很认同一句话,搞技术一定要有分享精神. 环境描述 安装包:mysql-5.6.21 ...

最新文章

  1. Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)
  2. Python语言学习:Python随机生成那些事之随机生成使用方法、案例应用之详细攻略
  3. 关系数据库基础知识介绍
  4. 《C++ Primer》14.1节练习
  5. oracle 如何创建job,oracle创建job
  6. mysql的四层架构_分布式数据库服务器的四层架构
  7. WinDbg 蓝屏dump分析教程
  8. linux拷贝文件夹到另一台机器,linux肿么一个文件拷贝到另一个文件夹
  9. [转载] [python3教程]第七章.输入输出(Input and Output)
  10. xcodebuild -exportArchive -allowProvisioningUpdates
  11. android二级菜单ui,巧用PopupMenu实现NavigationView的二级子菜单
  12. Java开发手册、帮助文档
  13. linux系统制作qcow2,centos7.6下qcow2镜像制作方法
  14. 国家天地图API 创建点 覆盖物
  15. 阿里云服务器,腾讯云服务器,华为云服务器被攻击了怎么办?
  16. Android入门之简易计算器(一)
  17. 今日更新 | 955.WLB 不加班公司名单 | 新增5家公司
  18. 华硕主板win10 使用固态硬盘,机械硬盘不显示解决
  19. 使用Python操作Jenkins(创建,构建,获取Job日志和报告)
  20. End-to-end Audio-visual Speech Recognition with Conformers

热门文章

  1. 计算机培训简报膜报,信息技术培训工作简报(第4期).doc
  2. endnote如何导入和导出文献
  3. 如何恢复误删除的数据库
  4. 电赛猜题?我觉得没用,还不如做好这些!
  5. 多重背包模板 C++
  6. jsp嵌入vlc视频回放_javaweb怎么实现视频播放?
  7. python数据分析论文-python用于论文数据处理与展示
  8. 使用Graphics绘制图形
  9. 【汇正财经】股本组织经营管理
  10. 网络推广引流方法大全