R语言的告警”条件的长度大于一,因此只能用其第一元素“的解决办法
2015-07-09 14:34
6286 查看
告警:”条件的长度大于一,因此只能用其第一元素“
原因:向量和标量的问题
举例:
正确的方式应该是:
其实就是向量化编函数,不需要用循环,可以对数据框进行计算,不需要用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
}
原因:向量和标量的问题
举例:
> 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
}
相关文章推荐
- php绘图图片失真问题处理
- 【C语言】求数值的正数次方
- javascript提醒
- html5开发移动混合App系列2-开发环境搭建(windows)
- Android 如何在Launcher桌面创建或者删除快捷图标
- 按之字形顺序打印二叉树
- 数据挖掘之K-means算法
- mac 查看端口是否被使用
- EditText输入手机号自动带空格
- ios 获取屏幕的属性和宽度
- ViewPager的视差背景效果
- C#开发Unity游戏教程之判断语句
- IE 跟人家不一样的一些地方
- CocoaPods 下载慢
- 【C语言】打印1到最大的n位数
- 分析Masonry
- TCP协议过程详解
- iPhone如何打包成一个通用的静态库文件
- 关于Fragment对于回退栈的理解问题
- MySQL 初始化root 密码