在 if 条件句中使用向量
上述例子的函数中,都只输入了单一值。如果我们提供一个向量,那么这个函数将产
生警告,这是因为 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 条件句中使用向量的更多相关文章
- 2016/1/12 第一题 输出 i 出现次数 第二题 用for循环和if条件句去除字符串中空格 第三题不用endwith 实现尾端字符查询
import java.util.Scanner; public class Number { private static Object i; /* *第一题 mingrikejijavabu中字符 ...
- 3d中的向量
向量基础知识 向量有且仅有的两个属性:方向长度(注意:向量性情中不包含位置信息) 向量相等就是其两个属性相等 向量处理标记位置:当向量的起始点与坐标原点重合,这样我们就可以用向量的终点坐标来描述一个处 ...
- 【shell 练习1】编写Shell条件句练习
实例一.比较两个整数大小 #!/bin/bash while true do read -p "Please input two int nums:" a b >/dev/& ...
- 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具
计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具 一 基础 1:向量分析和变换 两个工具 可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...
- Mysql 查询出某列字段 被包含于 条件数据中
我们通常是使用 某条件 是否包含于 某列中 ,简单点 就是:select * from 表名 where 字段名 like '%条件数据%'; 现在说下 某列 被包含于 条件数据中 接下 ...
- 在条件判断中使用 all() / any()
在条件判断中使用 all() / any() all() 和 any() 两个函数非常适合在条件判断中使用.这两个函数接受一个可迭代对象,返回一个布尔值,其中: all(seq):仅当 seq 中所有 ...
- 将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql、改为会话级别临时表 【我】
将一个多表关联的条件查询中的多表通过 create select 转化成一张单表的sql 将结果改为创建一个会话级别的临时表: -- 根据下面这两个sql CREATE TABLE revenu ...
- java中的case里嵌套if条件句; 输入一个年份的某一个月份,判断这个月有多少天
public class year { public static void main(String arg[]){ Scanner a=new Scanner(System.in ...
- 从NLP任务中文本向量的降维问题,引出LSH(Locality Sensitive Hash 局部敏感哈希)算法及其思想的讨论
1. 引言 - 近似近邻搜索被提出所在的时代背景和挑战 0x1:从NN(Neighbor Search)说起 ANN的前身技术是NN(Neighbor Search),简单地说,最近邻检索就是根据数据 ...
随机推荐
- 微信小程序 --- 文件的上传和下载
文件上传 / 文件下载 : wx.uploadFile
- Linux登录失败处理功能
本文要实现的功能:如果有人恶意尝试破解你的服务器密码,那么这个功能就能帮你起到一定的作用,当尝试密码错误超过设定的次数后,就会锁定该账户多长时间(自行设定),时间过后即可自行解锁,这样可以增加攻击者 ...
- Oracle开发 之 主-外键约束FK及约束的修改
试验环境: 1)数据库版本:oracle 11.2.0.4 2)建表脚本:以scott的dept及emp表为基础. 父表:dept -- Create table create table DEPT ...
- redis cluster集群部署
上一篇http://www.cnblogs.com/qinyujie/p/9029153.html,主要讲解了 redis cluster 集群架构 的优势.redis cluster 和 redis ...
- Django - 路由层(URLconf)
一.django 静态文件配置 /mysite1/settings.py STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_ ...
- Django - 模型层 - 上
一.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- [原创]chromium源码阅读-进程间通信IPC.消息的接收与应答
chromium源码阅读-进程间通信IPC.消息的接收与应答 chromium源码阅读-进程间通信IPC.消息的接收与应答 介绍 chromium进程间通信在win32下是通过命名管道的方式实现的 ...
- macOS Sierra 10.12版本 显示隐藏文件
1.显示隐藏文件 打开Terminal 输入:defaults write com.apple.finder AppleShowAllFiles -bool true 再输入: killall Fin ...
- 7.如何将python脚本打包为exe形式
先安装pyinstaller,pip install pyinstaller 然后 pyinstaller -F combine.py打包即可
- python16_day36【爬虫1】
一.requests 1. GET请求 # 1.无参数实例 import requests ret = requests.get('https://github.com/timeline.json') ...