if else function returns 不是我要求的
if else function returns not what I asked for
我有以下功能
aa<-function(x){
if (x==c(3,4,5))
return (1)
if (x==c(6,7,8))
return(2)
else
return(0)
}
然后我尝试以下操作:
> `aa(3)`
[1] 1
> `aa(4`)
[1] 0
> `aa(5)`
[1] 0
> `aa(6)`
[1] 2
> `aa(7)`
[1] 0
> `aa(8)`
[1] 0
我不知道为什么只有 aa(3)
和 aa(6)
给了我想要的结果,而 aa(4)
和 aa(5)
却没有 return 1并且 aa(7)
和 aa(8)
不会 return 2. 如何更正我的代码,使值 3、4 或 5 returns 1 和 6 、7 或 8 returns 2,否则为 0?
对于成员资格测试,请使用 %in%
,而不是 ==
。看看R控制台的区别:
> 3 == c(3,4,5)
[1] TRUE FALSE FALSE
> 3 %in% c(3,4,5)
[1] TRUE
这样就可以了
aa<-function(x){
if (x==3|x==4|x==5){
return (1)}
else if (x==6|x==7|x==8){
return(2)}
else{
return(0)}
}
那我有
aa(4)
[1] 1
注意 |
是 "or" 运算符
为什么? ... 你问。您应该已经看到一条您没有告诉我们的警告消息(实际上是两条)。
> aa(4)
[1] 0
Warning messages:
1: In if (x == c(3, 4, 5)) return(1) :
the condition has length > 1 and only the first element will be used
2: In if (x == c(6, 7, 8)) return(2) else return(0) :
the condition has length > 1 and only the first element will be used
if
语句正在处理 x == c(3, 4, 5)
和 x == c(6, 7, 8)
操作的结果,每个操作都返回一个 3 元素逻辑向量。 if()
-函数只需要一个值,如果它变得更多则发出警告,告诉您只使用了第一个项目。
有几种方法可以处理这个问题。 %in%
中缀函数是一个,您还可以使用 match()
或 any()
将单个结果返回给 if()
函数:
aa<-function(x){
if (match(x, c(3,4,5)) ) # match returns a location; any value > 0 will be TRUE
return (1)
if (match(x, c(6,7,8)) )
return(2)
else
return(0)
}
或者:
aa<-function(x){
if ( any( x==c(3,4,5)) ) # a single logical TRUE if any of the "=="-tests are TRUE.
return (1)
if ( any( x==c(6,7,8)) )
return(2)
else
return(0)
}
aa(4)
[1] 1
我有以下功能
aa<-function(x){
if (x==c(3,4,5))
return (1)
if (x==c(6,7,8))
return(2)
else
return(0)
}
然后我尝试以下操作:
> `aa(3)`
[1] 1
> `aa(4`)
[1] 0
> `aa(5)`
[1] 0
> `aa(6)`
[1] 2
> `aa(7)`
[1] 0
> `aa(8)`
[1] 0
我不知道为什么只有 aa(3)
和 aa(6)
给了我想要的结果,而 aa(4)
和 aa(5)
却没有 return 1并且 aa(7)
和 aa(8)
不会 return 2. 如何更正我的代码,使值 3、4 或 5 returns 1 和 6 、7 或 8 returns 2,否则为 0?
对于成员资格测试,请使用 %in%
,而不是 ==
。看看R控制台的区别:
> 3 == c(3,4,5)
[1] TRUE FALSE FALSE
> 3 %in% c(3,4,5)
[1] TRUE
这样就可以了
aa<-function(x){
if (x==3|x==4|x==5){
return (1)}
else if (x==6|x==7|x==8){
return(2)}
else{
return(0)}
}
那我有
aa(4)
[1] 1
注意 |
是 "or" 运算符
为什么? ... 你问。您应该已经看到一条您没有告诉我们的警告消息(实际上是两条)。
> aa(4)
[1] 0
Warning messages:
1: In if (x == c(3, 4, 5)) return(1) :
the condition has length > 1 and only the first element will be used
2: In if (x == c(6, 7, 8)) return(2) else return(0) :
the condition has length > 1 and only the first element will be used
if
语句正在处理 x == c(3, 4, 5)
和 x == c(6, 7, 8)
操作的结果,每个操作都返回一个 3 元素逻辑向量。 if()
-函数只需要一个值,如果它变得更多则发出警告,告诉您只使用了第一个项目。
有几种方法可以处理这个问题。 %in%
中缀函数是一个,您还可以使用 match()
或 any()
将单个结果返回给 if()
函数:
aa<-function(x){
if (match(x, c(3,4,5)) ) # match returns a location; any value > 0 will be TRUE
return (1)
if (match(x, c(6,7,8)) )
return(2)
else
return(0)
}
或者:
aa<-function(x){
if ( any( x==c(3,4,5)) ) # a single logical TRUE if any of the "=="-tests are TRUE.
return (1)
if ( any( x==c(6,7,8)) )
return(2)
else
return(0)
}
aa(4)
[1] 1