R语言的告警”条件的长度大于一,因此只能用其第一元素“的解决办法

原创 2015年07月09日 14:34:52


告警:”条件的长度大于一,因此只能用其第一元素“

原因:向量和标量的问题

举例:

> x<-seq(-2,2);  # x是个长度为5的向量
> x
[1] -2 -1  0  1  2
> if(x>0) 1 else 0  
[1] 0
Warning message: 如果x的长度>1,只使用x的第一个元素,x的第一个元素是-2,所以输出是0
In if (x > 0) 1 else 0 :
  the condition has length > 1 and only the first element will be used
正确的方式应该是:

> y <- numeric(length(x)) ;#首先将输出结果初始化长度与输入值相同,即一个输出结果对应一个输入
> y
[1] 0 0 0 0 0   ;#输出y初始化为长度5的0向量 
> y[x>0]<-1    ;# 每一个下标[]的值进行条件判断,条件为T/F时,赋不同的值
> y[x<=0]<-0
> y             #最终的结果实现了对向量的每个元进行了计算          
[1] 0 0 0 1 1

其实就是向量化编函数,不需要用循环,可以对数据框进行计算,不需要用lapply,mutate之类的了,简单易懂。

编了一个函数,

Tag_5_Stars(clf2_traffice[ ,3],clf2_traffice[ ,8:12]);

Tag_5_Stars=function(x,a){
 
  Stars<-numeric(length(x));
  a1<-numeric(length(a));
  a1<-a;
 
  Stars[is.na(x)]<-NA ;    # 返回NA
 
  Stars[ x<=a1[1]  ]<-0 ;     # 返回0星
 
  Stars[ (x>a1[1]) & (x<=a1[2]) ]<-1 ;    # 返回1星
 
  Stars[ (x>a1[2]) & (x<=a1[3]) ]<-2 ;    # 返回2星
 
  Stars[ (x>a1[3]) & (x<=a1[4]) ]<-3 ;    # 返回3星
 
  Stars[ (x>a1[4]) & (x<=a1[5]) ]<-4 ;    # 返回4星
 
  Stars[ x>a1[5]   ]<-5 ;    # 返回5星  
 
  Stars
}

R中的高效批量处理函数(lapply sapply apply tapply mapply)

R语言提供了批量处理函数,可以循环遍历某个集合内的所有或部分元素,以简化操作。 这些函数底层是通过C来实现的,所以效率也比手工遍历来的高效。 批量处理函数有很重要的apply族函数:lapply ...
  • wa2003
  • wa2003
  • 2015年05月21日 09:01
  • 6535

7.1、KNN实例

Loading [MathJax]/jax/output/HTML-CSS/jax.js KNN实例 junjun 2016年2月10日 实例一、K近邻算法R语言实践,使用class包...
  • qq_16365849
  • qq_16365849
  • 2016年02月10日 17:10
  • 1234

R语言:lengths计算列表list中元素的个数

这次介绍一个大家可能会用到的函数,但是又与我们常用的函数有所区别。lengths一看,还以为是length函数,我们要介绍的函数后面多了一个s,专门用于计算列表list的长度,下面用例子来呈现我们的函...
  • xxzhangx
  • xxzhangx
  • 2016年12月09日 21:19
  • 5002

寻找大小为n的数组中出现次数超过n/2的那个数

问题描述: 在一个大小为n的数组中,其中有一个数出现的次数超过n/2,求出这个数。这题看似很简单,但是找到最优解不容易,一般情况我们首先想到最笨的方法,每选一个数,遍历一次数组,复杂度O(N^2),或...
  • a7980718
  • a7980718
  • 2016年03月14日 15:21
  • 1738

北理工计算机学院2011级Java试题、部分答案及分析

北京理工大学计算机科学技术学院 2013-2014学年第一学期Java语言程序设计考试试题(A) 说明:(1)本次考试为开卷考试,允许学生携带笔记本电脑及其他资料,允许上网,但不允许以各种手段相互抄袭...
  • bitfan
  • bitfan
  • 2014年02月28日 22:46
  • 6842

retrofit sendto failed: ECONNRESET (Connection reset by peer)【android客户端Post请求参数长度限制(参数过大)】解决办法

最近在做图文上传功能,使用retrofit作为上传工具,当文章数超过900字(中文)时会报sendto failed: ECONNRESET (Connection reset by peer)错误,...
  • qq137722697
  • qq137722697
  • 2017年03月11日 10:23
  • 2139

新版本ADT创建Android项目无法自动生成R文件解决办法

  • 2015年11月25日 21:08
  • 2.59MB
  • 下载

java代码长度不能大于65535字节的解决办法

由于java虚拟机的限制,在java中变量、方法的代码长度是不能大于65535字节的,针对此问题我总结了相关的解决办法。 1. 数据库 这是最为传统的,也是大多数人第一想到到的办法了。 2. 文...
  • wangpeng047
  • wangpeng047
  • 2012年12月31日 17:23
  • 5726

Uiautomator中longClick方法时间长度无法调节的解决办法

很早就想分享此问题的解决办法,但总是找不到时间 在Uiautomator测试初期实施中,会遇到方法无法满足的情况,比如较常用的LongClick方法,此方式不太清楚到底多长(看到网上过说...
  • pyn815093235
  • pyn815093235
  • 2015年05月21日 18:41
  • 2049

什么是死锁及死锁产生条件和解决办法

1.死锁的概念 死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在...
  • Windy0011
  • Windy0011
  • 2017年06月18日 15:55
  • 135
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:R语言的告警”条件的长度大于一,因此只能用其第一元素“的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)