上述例子的函数中,都只输入了单一值。如果我们提供一个向量,那么这个函数将产
生警告,这是因为 if 语句不能与多值向量共存。
check_ _positive(c(1,-1,0))
## Warning in if (x > 0) 1: 条件的长度大于一,因此只能用其第一元素
## [1] 1
从输出结果可以看到,if 语句忽视除第 1 个元素以外的所有元素,假如提供多值逻辑
向量的话:
num <- c(1,2,3)
if (num > 2){
cat("num > 2!")
}
## Warning in if (num > 2) {: 条件的长度大于 1,因此只能用其第一元素
这个表达式产生了一个警告,表明只使用第 1 个元素 (1 > 2)。实际上,当我们尝试将
一个表达式作用于逻辑向量时,该表达式的值会被 TRUE 和 FALSE 混淆而显得逻辑不清。
一些逻辑函数可以避免出现模棱两可的情况。举个例子,只要给定向量中有一个值
是 TRUE,any( ) 函数就会返回 TRUE:
any(c(TRUE,FALSE,FALSE))
## [1] TRUE
any(c(FALSE,FALSE))
## [1] FALSE
因此,如果我们确实想知道向量中是否存在大于 2 的值,就应该使用 any( ) 函数:
if (any(num > 2)) {
cat("num > 2!")
}
## num > 2!
类似地,如果想知道输出向量中是否所有值都大于 2,我们应该调用 all( ) 函数:
if (all(num > 2)) {
cat("num > 2!")
} else {
cat("Not all values are greater than 2!")
}
## Not all values are greater than 2!
因此,每次使用 if 表达式来分支工作流时,都要确保待判断条件是单值逻辑向量。
否则,就会出现一些意想不到的情况。
另一个例外是 NA,虽然它是单值逻辑向量,但稍不注意,就可能导致 if 条件报错:
check <- function(x) {
if(all(x > 0)){
cat("All input values are positive!")
} else {
cat("Some value are not positive!")
}
}
对于不存在缺失值的典型数值向量,check( ) 函数可以完美运行。然而,如果 x 中
存在缺失值,那么函数可能最终产生错误:
check(c(1,2,3))
## All input values are positive!
check(c(1,2,NA,-1))
## Some value are not positive!
check(c(1,2,NA))
## Error in if (all(x > 0)) {: 需要 TRUE/FALSE 值的地方不可以用缺少值
由此可知,当我们写 if 条件语句时应该小心缺失值。当逻辑复杂且输入数据多种多
样时,难以用恰当的方式简单绕地过缺失值。注意到 any( ) 和 all( ) 均可使
用 na.rm( )来处理缺失值。在写条件句的时候也应该考虑这个因素。
一个简化条件检查的方法是使用 isTRUE(x),它在内部调用 identical(TRUE,x)。
在这种情况下,只有一个单独的 TRUE 可以满足该条件,其他的值不会。

在 if 条件句中使用向量的更多相关文章

  1. 2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询

    import java.util.Scanner; public class Number { private static Object i; /* *第一题 mingrikejijavabu中字符 ...

  2. 3d中的向量

    向量基础知识 向量有且仅有的两个属性:方向长度(注意:向量性情中不包含位置信息) 向量相等就是其两个属性相等 向量处理标记位置:当向量的起始点与坐标原点重合,这样我们就可以用向量的终点坐标来描述一个处 ...

  3. 【shell 练习1】编写Shell条件句练习

    实例一.比较两个整数大小 #!/bin/bash while true do read -p "Please input two int nums:" a b >/dev/& ...

  4. 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具

    计算机图形学 opengl版本 第三版------胡事民 第四章  图形学中的向量工具 一   基础 1:向量分析和变换   两个工具  可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...

  5. Mysql 查询出某列字段 被包含于 条件数据中

    我们通常是使用  某条件  是否包含于 某列中   ,简单点 就是:select * from 表名 where  字段名 like '%条件数据%'; 现在说下   某列 被包含于 条件数据中 接下 ...

  6. 在条件判断中使用 all() / any()

    在条件判断中使用 all() / any() all() 和 any() 两个函数非常适合在条件判断中使用.这两个函数接受一个可迭代对象,返回一个布尔值,其中: all(seq):仅当 seq 中所有 ...

  7. 将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql、改为会话级别临时表 【我】

    将一个多表关联的条件查询中的多表通过 create   select  转化成一张单表的sql 将结果改为创建一个会话级别的临时表: -- 根据下面这两个sql CREATE TABLE revenu ...

  8. java中的case里嵌套if条件句; 输入一个年份的某一个月份,判断这个月有多少天

    public class year {    public static void main(String arg[]){        Scanner a=new Scanner(System.in ...

  9. 从NLP任务中文本向量的降维问题,引出LSH(Locality Sensitive Hash 局部敏感哈希)算法及其思想的讨论

    1. 引言 - 近似近邻搜索被提出所在的时代背景和挑战 0x1:从NN(Neighbor Search)说起 ANN的前身技术是NN(Neighbor Search),简单地说,最近邻检索就是根据数据 ...

随机推荐

  1. iOS - 初学iPad开发入门

    iPad是一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑MacBook产品之间跟iPhone一样,搭载的是iOS操作系统 iPhone和iPad开发的区别 屏幕的 ...

  2. applicationContext.xml的文件位置就可以有两种默认实现

    ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在web ...

  3. springMVC各个包下的作用

    spring的jar各包作用spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下 ...

  4. Spring boot maven 搭建框架

    Spring Boot:目的:这个框架帮助开发者更容易地创建基于Spring的应用程序和服务,使得pring开发者能够最快速地获得所需要的Spring功能.优点:完全不需要XML配置,让spring应 ...

  5. Http协议中Cookie详细介绍(转)

    原文:http://www.169it.com/article/3217120921.html Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存C ...

  6. 使用 Nginx 提升网站访问速度

    使用 Nginx 提升网站访问速度 http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/ Nginx 简介 Nginx ("engine ...

  7. nodejs中使用linq

    官网地址 https://github.com/mihaifm/linq 安装 npm install linq 导入 var Enumerable = require(‘linq‘); 例子 1 总 ...

  8. Web Services 平台元素SOAP、WSDL 、UDDI

    Web Services 拥有三种基本的元素:SOAP.WSDL 以及 UDDI. 什么是 SOAP? SOAP 是一种使应用程序有能力通过 HTTP 交换信息的基于 XML 的简易协议.或者可以更简 ...

  9. 上传文件小的oK,大一点的传不了,显示 (failed) net::ERR_CONNECTION_RESET

    我很确定已经修改了php.ini中的文件上传限制,文件权限可写. 修改php.ini file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tmp_ ...

  10. VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)

    加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益.趁热打铁,鸡啄米这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出. 一.模态 ...