找回密码
 立即注册
查看: 4946|回复: 1

关于if-else和ifelse判断语句问题

[复制链接]
发表于 2016-4-21 21:19:25 | 显示全部楼层 |阅读模式
之前通过查找以了解if-else 与ifelse的区别,前者不能处理向量,后者使用更为紧凑。但是在实际使用中发现除了问题,请各位指点!
示例代码如下:
###############################
#对一组数据进行区间判断,划分区间如
#7.5-6-5-3-2,对应类别为1,2,3,4,5,6
###########################
data<-c( "8.772500","12.261250","10.67")
do_sort<-vector(mode="numeric",length=3)
###################################
#使用if-else的判断
for(j in 1:3)
{
if(data[j]>="7.5"){
    do_sort[j]= "1"
    }else if (data[j]>="6" && data[j]<"7.5"){
    do_sort[j]="2"
    } else if (data[j]>="5" && data[j]<"6"){
    do_sort[j]="3"
    } else if (data[j]>= "3" && data[j]<"5"){
    do_sort[j]="4"
    } else if (data[j]>="2" && data[j] <"3"){
    do_sort[j]="5"
    } else if (data[j] <"2"){
    do_sort[j]="6"
    }
}
do_sort[1:3]#结果为1,6,6
############################
#另一种学习的方法
##############
do_sort[data[j]>="7.5"]<-1
do_sort[data[j]>="6" && data[j]<"7.5"]<-2
do_sort[data[j]>="5" && data[j]<"6"]<-3
do_sort[data[j]>= "3" && data[j]<"5"]<-4
do_sort[data[j]>="2" && data[j] <"3"]<-5
do_sort[data[j] <"2"]<-6
do_sort[1:3]#结果为6,6,6,
############################
#使用ifelse的实例
#####################
for(j in 1:3)
{
do_sort[j]<-ifelse(data[j]>="7.5",1,
ifelse(data[j]>="6" && data[j]<"7.5",2,
ifelse(data[j]>="5" && data[j]<"6",3,
ifelse(data[j]>= "3" && data[j]<"5",4,
ifelse(data[j]>="2" && data[j] <"3",5,6
)))))
}
do_sort[1:3]#结果为1,6,6
#################################
正确分类结果应都为1
不知道是哪里问题~~


回复

使用道具 举报

 楼主| 发表于 2016-4-22 09:10:38 | 显示全部楼层
自己来回复吧~~
问题出在判断用的数值用双引号标记,是字符串,而字符串的比较以顺序依次比较。
另外,此类问题还有一个较简洁的判别语句,使用cut()和switch()。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-23 10:54 , Processed in 0.038139 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表