您的位置:首页 > 其它

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

2015-07-09 14:34 6286 查看
告警:”条件的长度大于一,因此只能用其第一元素“

原因:向量和标量的问题

举例:

> 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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: