上述例子的函数中,都只输入了单一值。如果我们提供一个向量,那么这个函数将产
生警告,这是因为 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),简单地说,最近邻检索就是根据数据 ...
随机推荐
-
css垂直居中方法盘点
1.单行文字垂直居中 利用 line-height 即可轻松实现,如下示例: height:45px;line-height:45px; 2.多行文本固定高度垂直居中1 利用 display:tabl ...
-
Unity5中WebGL平台封装的一些技巧
最近在接触unity的WebGL平台,其实这个平台作为Web Player的替代品,已经能满足大部分的开发需求,而且不需要额外的插件支持,确实方便了不少,但开发中依旧遇到了不少问题,在这里记录和共享一 ...
-
[Error] Error parsing XML: unbound prefix
发生该错误的代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
-
慕课网:C++ &; 数据结构
课程链接:james_yuan的课程 这部分太枯燥了,如果教材难度稍大,根本就学不下去,所以就先看看通俗的视频吧. 课程目录 1.C++远征之起航篇 - C++亮点尽在其中 2.C++远征之离港篇 - ...
-
统计文件夹下java代码行数的小程序--主要是学习任务队列的思想
首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...
-
Executing a script from Nagios event handler fails to run
I have Nagios running on a webserver. For this one Nagios service check in particular, if it fails, ...
-
CSS定位属性Position详解
CSS中最常用的布局类属性,一个是Float(CSS浮动属性Float详解),另一个就是CSS定位属性Position. 1. position:static 所有元素的默认定位都是:position ...
-
tmux 配置
tmux配置文件名为.tmux.conf,位于用户根目录下. 常用的配置为: # vimsetw -g mode-keys vibind [ copy-modebind -t vi-copy v be ...
-
If-Modified-Since页面是否更新
第一次先请求某个网页,抓取到本地,假设文件名为 a.html.这时文件系统有个文件的修改时间. 第二次访问网页,如果发现本地已经有了 a.html,则向服务器发送一个 If-Modified-Sinc ...
-
Excel教程(13) - 统计函数
AVEDEV 用途:返回一组数据与其平均值的绝对偏差的平均值,该 函数可以评测数据(例如学生的某科考试成绩)的离散度. 语法:AVEDEV(number1,number2,...) 参数:Number ...